2014-02-17 158 views
0

我用BT低能能夠行李報警裝置(Link)工作,並已與我的Nexus 7HOWTO連接到藍牙LE設備上的Android(平臺19)

docs 我成功配對,現在想使用以下代碼連接到設備:

private BluetoothGattCallback callback = new BluetoothGattCallback() { 
    @Override 
    public void onConnectionStateChange(BluetoothGatt gatt, int status, 
      int newState) { 
     Log.i(TAG, "le onConnectionStateChange ["+newState+"]"); 
     if (newState == BluetoothProfile.STATE_CONNECTED) { 
      Log.i(TAG, "le device connected"); 
      onConnect(gatt.getDevice()); 
     } else if (newState == BluetoothProfile.STATE_DISCONNECTED) { 
      Log.i(TAG, "le device disconnected"); 
      onDisconnect(gatt.getDevice()); 
     } 
    } 
    @Override 
    public void onServicesDiscovered (BluetoothGatt gatt, int status) { 
     Log.i(TAG, "onServicesDiscovered"); 
    } 
}; 


for (BluetoothDevice device : BluetoothAdapter.getDefaultAdapter().getBondedDevices()) { 
    int type = device.getType(); 

    if (type == BluetoothDevice.DEVICE_TYPE_LE || type == BluetoothDevice.DEVICE_TYPE_DUAL) { 
     List<BluetoothDevice> connectedDevices =  
     bluetoothManager.getConnectedDevices(BluetoothProfile.GATT); 

     if (!connectedDevices.contains(device)) { 
      BluetoothGatt gatt = device.connectGatt(App.getContext(), false, callback); 
      gatt.connect(); 
      gatt.discoverServices(); 
      List<BluetoothGattService> services = gatt.getServices(); 
     } 
    } 
} 

但是,無法啓動連接。一段時間後(幾秒鐘),連接狀態 更改爲BluetoothProfile.STATE_DISCONNECTED - 即使BluetoothProfile.STATE_CONNECTED 未被達到。我在這裏做錯了什麼?

+0

可以在未連接的情況下綁定設備。 gatt.connect()實際運行嗎?開始掃描更常見,以獲取可用設備的列表,而不是假設它已經連接。你也可以嘗試一下。 –

+0

仔細看,它說!connectedDevices.contains(設備)。上面的代碼遍歷綁定設備列表,並嘗試與當前未連接的設備建立連接。循環中的代碼被運行,並且回調被調用,但是不用於BluetoothProfile.STATE_CONNECTED – fabian

+0

除了上述評論之外,另一個可能的幫助是你不想調用discoverServices,而gattServices是序列化的。您希望等待每個回調,否則getServices將不會返回任何內容。我還注意到,您正試圖連接到通常使用RSSI檢測信號強度和距離的標籤,因此我不確定GATT服務器的定義有多好。 – Zomb

回答

2

事實證明,我的代碼畢竟是正確的。 顯然,藍牙堆棧已進入故障狀態 ,只能通過將設備關閉 然後再次打開來恢復。

僅供參考:我有Nexus 7設備。第一版(我認爲它在2012年底出來了 )和最近的一個。

藍牙低功耗在2012 Nexus 7上不起作用。 (即使關閉再打開後也不會)。

這兩款設備都運行Android 4.4.2。

我的結論,即藍牙低能量不會在Nexus 7 2012 工作,是對當前的Nexus 7

如何很傷心,這是不穩定的。

+0

嗨fabian,你是能夠解決這個問題,即使面臨同樣的情況。在5-6請求它進入newState == BluetoothProfile.STATE_DISCONNECTED但實際上它連接到設備。 –

+0

不幸的是沒有。我對這個問題的判決是,現在仍然是藍牙LE在Nexus 7設備上出現故障。 – fabian

+0

我谷歌,發現它與Android的問題。檢查此鏈接https://code.google.com/p/android/issues/list?can=2&q=ble&colspec=ID+Type+Status+Owner+Summary+Stars&cells=tiles –

0

問題是,Android將只允許6個最大的藍牙連接。當設備斷開連接時,必須調用mBluetoothGatt.close()

+0

已停止它 – fabian