2015-12-17 40 views
6

Làm cách nào để biết liệu thiết bị Bluetooth có được kết nối với máy tính xách tay hay không trước khi truyền dữ liệu? Tôi đã viết một chương trình java sử dụng blue-cove lib để khám phá và chuyển dữ liệu qua máy tính xách tay. Sau khi truyền dữ liệu lần đầu tiên, làm thế nào tôi có thể kiểm tra xem thiết bị có còn được kết nối với máy tính xách tay trước khi chuyển dữ liệu trong lần tiếp theo không?Kiểm tra trạng thái thiết bị bluetooth đã kết nối

Tôi đã thấy một câu hỏi tương tự như thế này. Nhưng họ đã hỏi cách kiểm tra trạng thái thiết bị Bluetooth được kết nối với Android.

Trả lời

3

Bạn có thể làm theo một số bước và tạo một tác vụ không đồng bộ để xác minh kết nối trong khi đang tìm kiếm và chia sẻ tệp giữa các thiết bị.

Các chức năng deviceDiscovered()inquiryCompleted() là những ứng dụng được phát hiện khi thiết bị được tìm thấy và khi yêu cầu kết thúc.

Nếu thiết bị bị ngắt kết nối, bạn sẽ nhận được một thông báo từ phương pháp inqueryCompleted và xử lý nó trong dòng:

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

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

Trong InterruptedException bạn có thể xử lý các lỗi.

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(); 
     } 
    } 

} 
Các vấn đề liên quan