4

Я пытаюсь прочитать значение температуры из профиля здоровья. health thermometer service. в соответствии с official google ble devlopment page, когда я пытаюсь уведомить характеристику термометра здоровья для чтения температуры, я пытаюсь записать значение дескриптора (Конфигурация клиентских характеристик), используя writeDescriptor метод обратного вызова writeDescriptor return status 5 согласно google, это GATT_INSUFFICIENT_AUTHENTICATION. поэтому я комментирую код writedescriptor и пытаюсь вызвать метод mBluetoothGatt.setCharacteristicNotification (характеристика, включен); но onCharacteristicChanged метод никогда не вызывал. когда я разговариваю с командой ios devloper. они сказали, что они никогда не записывают значение дескриптора, они просто устанавливают уведомление в true, и они получают значение температуры от одного и того же чипа. , чтобы написать значение дескриптора необходимо разработчику Android, чтобы получить уведомление ??? , так что, наконец, я пытаюсь запустить официальное приложение bluetooth с сайта bluetooth.com для тестирования, они просто отключили все три кнопки уведомлять чтение и запись ??? спасибо и извините за мой английскийbluetooth уведомление о низкой энергии

[UPDATE]
выяснить некоторый журнал, который может вызвать некоторые проблемы, склеивания, пожалуйста, помогите мне, если у вас есть какое-либо решение для этого.

  • Short-Term ключ, генерируемый еще войти как ошибка
    11-08 11: 26: 44.392: E/BT-SMP (1014): СТК Сформирован

  • после этого состояния связи изменения резко МАЕ это вызывает недостаточную аутентификацию
    11-08 11: 26: 49.437: I/BluetoothBondStateMachine (1014): bondStateChangeCallback: Status: 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 : Е/BluetoothBondStateMachine (1014): В стабильном состоянии, получил недопустимый NewState: 12

[UPDATE]
после обновления KITKAT 4.4 на Nexus 7. добавить два метода
device.createBond();
device.setPairingConfirmation(true);

работает для меня сейчас, я могу прочитать зашифрованную характеристику. но все еще нестабилен. но некоторые успехи я получил.

ответ

4

Да, в Android для включения уведомления BLE вы должны оба вызвать mBluetoothGatt.setCharacteristicNotification (характеристика, включен) и записать подходящее значение в дескриптор 0x2902 этого признака.

Я не уверен, почему вы получаете GATT_INSUFFICIENT_AUTHENTICATION, это может быть вызвано внедрением термометра.

EDIT: Из новой информации в комментариях, а также экране захваченного при условии, есть несколько вещей, которые вы можете проверить:

  1. Характеристика индикация характеристика, но не уведомление характеристика. Значение, которое вы пишете в дескрипторе, должно быть BluetoothGattDescriptor.ENABLE_INDICATION_VALUE, но не BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE. Обратите внимание, что вам все равно нужно включить индикацию с помощью setCharacteristicNotification().(Неверная терминология здесь, но это необходимо в соответствии с документами)

  2. Для неустойчивого стека Bluetooth на Android попробуйте перезапустить Bluetooth и включить WiFi. Это повысит стабильность. (Хотя не на 100% решает проблему)

+0

Спасибо за ответ, но почему разработчик ios получает значение температуры, не устанавливая значение дескриптора, просто устанавливая уведомление true ??, поэтому нам нужно создать две разные прошивки для аппаратуры термометра для ios и других для android ???? ??? – mcd

+1

@mcd Вам не нужно создавать две разные прошивки. Тот же самый термометр будет работать как на Android, так и на iOS, но в приложении для Android вы должны сделать дополнительный вызов для написания дескриптора, чтобы он работал. Я предполагаю, что на самом деле iOS также записывает дескриптор, но iOS делает это автоматически при настройке уведомления на true. – reTs

+0

спасибо. Я уже пытаюсь написать дескриптор, но он дает мне код состояния метода обратного вызова onWriteDiscriptor для вызова 5. И я пытаюсь прочитать характеристику с использованием readCharacteristic (характеристика); метод return false – mcd

0

В моем случае проблема заключалась в том, что объект BluetoothGatt может принимать только одну ожидающую операцию. Решение заключалось в том, чтобы выполнять операции чтения/записи последовательно, ожидая завершения обратного вызова завершения, прежде чем запрашивать вторую операцию чтения/записи.