2014-04-01 38 views
1

我已經建立了一個Android應用程序,可以通過藍牙(傳統藍牙)使用BluetoothSocket.connect()連接到外圍設備,並用它做一些互動。該應用工作得很好上三星Galaxy S3(4.3)和注3(4.3),但是,當在Nexus 5,應用程序不能連接到該設備。的Nexus 5無法連接到外圍設備

我有2個Nexus 5和兩者無法連接,是什麼讓我覺得一定有什麼問題的Nexus 5,而不是我。但是,當我使用設備製造商支持的應用程序連接到設備時,即使使用Nexus 5,也可以建立連接。

所以我猜,Nexus 5在經典藍牙上一定有問題,什麼使得建立連接並不容易,並且可能有一些解決方法。

對不起,我對如何解決這個問題的任何指針差English.Thanks。

這裏是我的logcat信息3塊:

三星Galaxy S3的logcat的信息(工作)的Nexus 5的在第一時間

04-01 17:03:33.340 D/BloodPressureService﹕ connect to: 8C:DE:52:2C:68:6D 
04-01 17:03:33.360 D/BluetoothUtils﹕ isSocketAllowedBySecurityPolicy start : device null 
04-01 17:03:33.360 W/BluetoothAdapter﹕ getBluetoothService() called with no BluetoothManagerCallback 
04-01 17:03:33.360 D/BloodPressureService﹕ setState() 0 -> 1 
04-01 17:03:33.365 I/BloodPressureMonitorFragment﹕ MESSAGE_STATE_CHANGE: 1 
04-01 17:03:35.095 D/BloodPressureService﹕ connected 
04-01 17:03:35.095 D/BloodPressureService$ConnectedThread﹕ create ConnectedThread 
04-01 17:03:35.105 I/BloodPressureService$ConnectedThread﹕ BEGIN mConnectedThread 
04-01 17:03:35.110 D/BloodPressureService﹕ setState() 1 -> 2 
04-01 17:03:35.125 I/BloodPressureMonitorFragment﹕ MESSAGE_STATE_CHANGE: 2 

logcat的信息(worked.Don't知道爲什麼,我從來沒有看到過,但只是一個時間):Nexus 5的在第2次

04-01 17:14:37.577 D/BloodPressureService﹕ connect to: 8C:DE:52:2C:68:6D 
04-01 17:14:37.577 D/BloodPressureService﹕ setState() 0 -> 1 
04-01 17:14:37.577 I/BloodPressureMonitorFragment﹕ MESSAGE_STATE_CHANGE: 1 
04-01 17:14:37.587 W/BluetoothAdapter﹕ getBluetoothService() called with no BluetoothManagerCallback 
04-01 17:14:37.587 D/BluetoothSocket﹕ connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[47]} 
04-01 17:14:39.207 D/BloodPressureService﹕ connected 
04-01 17:14:39.207 D/BloodPressureService$ConnectedThread﹕ create ConnectedThread 
04-01 17:14:39.207 D/BloodPressureService﹕ setState() 1 -> 2 
04-01 17:14:39.207 I/BloodPressureService$ConnectedThread﹕ BEGIN mConnectedThread 
04-01 17:14:39.217 I/BloodPressureMonitorFragment﹕ MESSAGE_STATE_CHANGE: 2 

logcat的信息(沒有工作,永遠不會再工作):

04-01 17:14:59.977 D/BloodPressureService﹕ connect to: 8C:DE:52:2C:68:6D 
04-01 17:14:59.977 D/BloodPressureService﹕ setState() 0 -> 1 
04-01 17:14:59.977 I/BloodPressureMonitorFragment﹕ MESSAGE_STATE_CHANGE: 1 
04-01 17:14:59.977 W/BluetoothAdapter﹕ getBluetoothService() called with no BluetoothManagerCallback 
04-01 17:14:59.987 D/BluetoothSocket﹕ connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[56]} 
+0

這個問題是不相關的節目。 – Kedarnath

+0

它絕對是。 – user1840255

+0

嘗試使用'BluetoothSocket.connect'時添加一些logcat輸出。否則,你的問題可能會被關閉。 – jww

回答

1

沒有與Nexus 5的一些變化在藍牙協議棧,這是有史以來最討厭的事情。當你打開套接字時,你可以嘗試使用不安全的套接字,看看是否有幫助。另外,還要確保所有現有的插座被關閉和空 -

adapter= BluetoothAdapter.getDefaultAdapter(); 
BluetoothDevice device = adapter.getRemoteDevice(mAddress); 
BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(UUID); 
socket.connect(); 

此時,你應該嘗試和檢索輸出流: -

out = socket.getOutputStream(); 
in = socket.getInputStream(); 

另外,還要確保你完全關閉插座: -

 if (in != null) { 
      in.close(); 
      in = null; 
     } 
     if (out != null) { 
      out.close(); 
      out = null; 
     } 
     if (socket != null) { 
      socket.close(); 
      socket = null; 
     } 
+1

接受你的建議,並在我的代碼中做了一些優化。現在,我的Nexus 5有時可以連接設備 - 但有時只是。不管怎樣,謝謝。 – rengwuxian

+0

我發現確保我完全關閉藍牙插座也有幫助。 (添加回答) – user1840255