2016-10-22 156 views
3

目前我正在開發一款新的Android應用程序。我需要該應用程序的藍牙。每次我想通過serversocket/socket系統連接兩個(配對)設備時,我無法創建一個工作套接字。它總是返回:在Android上需要選擇哪個UUID進行藍牙連接

java.io.IOException: read failed, socket might closed or timeout, read ret: -1 

所以我的問題是:我使用無效的UUID?如果情況並非如此。你有什麼其他的建議可能是錯的?

public Accept(BluetoothAdapter bt, BluetoothDevice device, Context context) { 
      try { 
       BluetoothAdapter.getDefaultAdapter().cancelDiscovery(); 
       BluetoothServerSocket tmp = null; 
       try { 
        UUID uuid = UUID.fromString("00001101-0000-1000-8000-00294F9B3423"); 
    //Here is the point when it doesn't work... 
        tmp = bt.listenUsingRfcommWithServiceRecord(context.getResources().getString(R.string.bt_string_for_profile_image), uuid); 
       } catch (Exception e) { 
       } 
       mmServerSocket = tmp; 

       bt_device = device; 
      } catch (Exception e) { 
      } 
     } 

感謝您的幫助提前。

回答

0

我想你是失蹤接受陳述在這裏。 聽完你的下一個陳述後應該是tmp.accept()。這將解決您的問題。所以,你的代碼應該是這樣的:

try { 
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00294F9B3423"); 
Bluetoothsocket clientSocket; 
//Here is the point when it doesn't work... 
tmp = bt.listenUsingRfcommWithServiceRecord(context.getResources().getString(R.string.bt_string_for_profile_image), uuid); 
clientSocket = tmp.accept(); 
} 

另外,有一點要記下來,接受函數調用就是阻塞代碼。

希望這會有所幫助。

+0

首先:感謝您的回覆。但我很遺憾地說,這並沒有解決我的問題。我可能沒有給你足夠的代碼。我的代碼看起來像你可以在這裏看到的那樣:[link](https://developer.android.com/guide/topics/connectivity/bluetooth.html#ConnectingAsAServer)所以我把它當作一個線程來處理。我在該Thread的run()方法中調用accept() - Methode。 – Swittmann

+0

但是,只要我稱之爲方法bt.listenUsingRfcommWithServiceRecord(context.getResources()。getString(R.string.bt_string_for_profile_image),uuid); throws serversocket的通道是-1,所以我認爲這個方法肯定是個問題? – Swittmann

+0

Ohhh ..對不起,我不知道你的完整代碼...現在,你可以在這裏做的第一件事是檢查listen函數返回的錯誤代碼/異常。這將有助於我們理解錯誤的原因。在我閱讀您提供的鏈接時,listen可以在這些情況下僅在出現錯誤時拋出異常,例如藍牙不可用,或者權限不足或使用頻道不正確。「 – aksonlyaks