2015-12-17 20 views
6

Bluetoothデバイスがまだノートパソコンに接続されているかどうかを知る方法を教えてください。私はblue-cove libを使ってJavaプログラムを書いて、ラップトップを通してデータを発見して渡しました。初めてデータを渡した後、次回にデータを渡す前に、デバイスがノートパソコンに接続されているかどうかを確認するにはどうすればよいですか?接続されているBluetoothデバイスの状態を確認してください。

私はこれに似たような質問を見ました。しかし、彼らはアンドロイドに接続されているBluetoothデバイスの状態をチェックする方法を尋ねました。

答えて

3

一連の手順に従って、非同期タスクを作成して、デバイス間でファイルを検索および共有しているときに接続を確認することができます。

ファンクションdeviceDiscovered()inquiryCompleted()は、デバイスが見つかったときと照会が完了したときに実行されるものです。

デバイスが切断された場合、あなたはラインでそれをする方法inqueryCompletedから通知し、ハンドルになるだろう:InterruptedExceptionあなたが扱うことができるで

try { 
        synchronized(lock){ 
         lock.wait(); 
        } 
       } 

       catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

エラーを。

package bt; 

import java.io.OutputStream; 
import java.util.ArrayList; 

import javax.bluetooth.DataElement; 
import javax.bluetooth.DeviceClass; 
import javax.bluetooth.DiscoveryAgent; 
import javax.bluetooth.DiscoveryListener; 
import javax.bluetooth.LocalDevice; 
import javax.bluetooth.RemoteDevice; 
import javax.bluetooth.ServiceRecord; 
import javax.bluetooth.UUID; 
import javax.microedition.io.Connector; 
import javax.obex.ClientSession; 
import javax.obex.HeaderSet; 
import javax.obex.Operation; 
import javax.obex.ResponseCodes; 

import bt.BTListener.MyDeviceListenerFilter; 

public class MyDiscoveryListener implements DiscoveryListener{ 

    private static Object lock=new Object(); 
    public ArrayList<RemoteDevice> devices; 

    public MyDiscoveryListener() { 
     devices = new ArrayList<RemoteDevice>(); 
    } 

    public static void main(String[] args) { 

     MyDiscoveryListener listener = new MyDiscoveryListener(); 

     try{ 
      LocalDevice localDevice = LocalDevice.getLocalDevice(); 
      DiscoveryAgent agent = localDevice.getDiscoveryAgent(); 
      agent.startInquiry(DiscoveryAgent.GIAC, listener); 

      try { 
       synchronized(lock){ 
        lock.wait(); 
       } 
      } 
      catch (InterruptedException e) { 
       e.printStackTrace(); 
       return; 
      } 


      System.out.println("Device Inquiry Completed. "); 


      UUID[] uuidSet = new UUID[1]; 
      uuidSet[0]=new UUID(0x1105); //OBEX Object Push service 

      int[] attrIDs = new int[] { 
        0x0100 // Service name 
      }; 

      for (RemoteDevice device : listener.devices) { 
       agent.searchServices(
         attrIDs,uuidSet,device,listener); 


       try { 
        synchronized(lock){ 
         lock.wait(); 
        } 
       } 
       catch (InterruptedException e) { 
        e.printStackTrace(); 
        return; 
       } 


       System.out.println("Service search finished."); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 



    @Override 
    public void deviceDiscovered(RemoteDevice btDevice, DeviceClass arg1) { 
     String name; 
     try { 
      name = btDevice.getFriendlyName(false); 
     } catch (Exception e) { 
      name = btDevice.getBluetoothAddress(); 
     } 

     devices.add(btDevice); 
     System.out.println("device found: " + name); 

    } 

    @Override 
    public void inquiryCompleted(int arg0) { 
     synchronized(lock){ 
      lock.notify(); 
     } 
    } 

    @Override 
    public void serviceSearchCompleted(int arg0, int arg1) { 
     synchronized (lock) { 
      lock.notify(); 
     } 
    } 

    @Override 
    public void servicesDiscovered(int transID, ServiceRecord[] servRecord) { 
     for (int i = 0; i < servRecord.length; i++) { 
      String url = servRecord[i].getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false); 
      if (url == null) { 
       continue; 
      } 
      DataElement serviceName = servRecord[i].getAttributeValue(0x0100); 
      if (serviceName != null) { 
       System.out.println("service " + serviceName.getValue() + " found " + url); 

       if(serviceName.getValue().equals("OBEX Object Push")){ 
        sendMessageToDevice(url);     
       } 
      } else { 
       System.out.println("service found " + url); 
      } 


     } 
    } 

    private static void sendMessageToDevice(String serverURL){ 
     try{ 
      System.out.println("Connecting to " + serverURL); 

      ClientSession clientSession = (ClientSession) Connector.open(serverURL); 
      HeaderSet hsConnectReply = clientSession.connect(null); 
      if (hsConnectReply.getResponseCode() != ResponseCodes.OBEX_HTTP_OK) { 
       System.out.println("Failed to connect"); 
       return; 
      } 

      HeaderSet hsOperation = clientSession.createHeaderSet(); 
      hsOperation.setHeader(HeaderSet.NAME, "Hello.txt"); 
      hsOperation.setHeader(HeaderSet.TYPE, "text"); 

      //Create PUT Operation 
      Operation putOperation = clientSession.put(hsOperation); 

      // Send some text to server 
      byte data[] = "Hello World !!!".getBytes("iso-8859-1"); 
      OutputStream os = putOperation.openOutputStream(); 
      os.write(data); 
      os.close(); 

      putOperation.close(); 

      clientSession.disconnect(null); 

      clientSession.close(); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 
関連する問題