4

我想從健康檔案中讀取溫度值。 health thermometer service。根據official google ble devlopment page當我嘗試通知一個健康溫度計特性來讀取溫度我嘗試寫描述符值(客戶端特性配置)使用writeDescriptor writeDescriptor的回調方法返回狀態5根據谷歌它的GATT_INSUFFICIENT_AUTHENTICATION。 所以我評論writedescriptor的代碼,並嘗試調用方法mBluetoothGatt.setCharacteristicNotification(特徵,啓用);但onCharacteristicChanged方法從未調用過。當我與我的ios devloper團隊交談時。他們表示,他們從不寫一個描述符值,他們只是將通知設置爲true,並從同一芯片獲取溫度值。 寫一個描述符的值是必要的android開發人員得到通知? 因此,最後我試圖從bluetooth.com網站運行官方藍牙應用程序進行測試目的,他們只是禁用所有三個按鈕通知讀取和寫入? 謝謝和對不起我的英語藍牙低功耗通知

[更新]
找出一些日誌這可能會導致一些問題,粘結請幫助我,如果你有任何的解決方案。

  • 短期密鑰生成的靜止登錄作爲誤差
    十一月11日至8日:26:44.392:E/BT-SMP(1014):STK生成

  • 該鍵狀態變化可能顯着地後這導致身份驗證不足
    11-08 11:26:49.437:I/BluetoothBondStateMachine(1014):bondStateChangeCallback:狀態:0地址:00:16:A4:C0:FF:EE newState:2
    11-08 11: 26:49.437:D/BtGatt.btif(1014):btif_gattc_upstreams_evt:事件9
    11-08 11:26:49.437 :E/BluetoothBondStateMachine(1014):在穩定狀態下,接收到的無效newState:12

[UPDATE]
在Nexus 7升級奇巧4.4後。添加兩種方法
device.createBond();
device.setPairingConfirmation(true);

適合我現在我可以讀取加密特徵。但仍然不穩定。但我得到了一些成功。

回答

4

是的,在Android中啓用BLE通知,您必須同時調用mBluetoothGatt.setCharacteristicNotification(特性,啓用)並將適當的值寫入該特性的描述符0x2902。

我不知道你爲什麼得到GATT_INSUFFICIENT_AUTHENTICATION,這可能是由溫度計的實現引起的。

編輯: 在評論新的信息,同時也捕捉到所提供的畫面,還有你可能要檢查的幾件事情:

  1. 特點是指示特徵,但不通知特性。您寫入描述符的值應該是BluetoothGattDescriptor.ENABLE_INDICATION_VALUE,但不是BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE。請注意,您仍然需要通過setCharacteristicNotification()打開指示。(在這裏混淆術語,但這是必要的按照文檔)

  2. 對於Android上不穩定的藍牙堆棧,嘗試重新啓動藍牙,並轉動WiFi。這會增加穩定性。 (雖然不是100%解決問題)

+0

謝謝對於響應,但爲什麼超過ios開發人員得到的溫度值沒有設置描述符值只是設置通知真正??因此,我們必須創建兩個不同的固件的溫度計硬件一個爲ios和其他的android? ??? – mcd

+1

@mcd您不需要創建兩個不同的固件。同樣的溫度計可以在Android和iOS上運行,但在Android應用程序中,您必須額外撥打一個描述符才能使其工作。我的猜測實際上是iOS也編寫描述符,但是iOS在將通知設置爲true時自動執行。 – reTs

+0

謝謝。我已經嘗試寫描述符,但它給我的回調方法的onWriteDiscriptor調用的狀態代碼爲5,我嘗試使用readCharacteristic(特性)讀取特徵;方法返回false – mcd

0

在我的情況下,問題是BluetoothGatt對象只能接受一個掛起的操作。解決方案是依次進行讀/寫操作,在請求第二次讀/寫操作之前等待第一次完成回調。