Android BLE (дескриптор Bluetooth Gatt) всегда null

#android #bluetooth #bluetooth-lowenergy

#Android #bluetooth #bluetooth-низкое энергопотребление

Вопрос:

Может кто-нибудь, пожалуйста, помогите.

Я разрабатываю приложение с низким энергопотреблением Bluetooth, работы выполнены:

  1. Устройства сканируют
  2. Подключение устройства
  3. Запись на удаленное устройство Raspberry Pi

Удаленное устройство имеет идентификатор службы:

6e400001-b5a3-f393-e0a9-e50e24dcca9e

Запись строк:

6e400002-b5a3-f393-e0a9-e50e24dcca9e

Строка уведомления равна:

6e400003-b5a3-f393-e0a9-e50e24dcca9e

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

Я могу писать с помощью: gatt.writeCharacteristic(characteristicWrite);

Я могу включить уведомление с помощью:

gatt.setCharacteristicNotification(characteristicNotify, true);

Но когда я пытаюсь получить дескриптор, дескриптор всегда равен нулю.

Я пытался:

  1. UUID uuid = UUID.fromString(«00000001-0000-1000-8000-00805f9b34fb»); дескриптор BluetoothGattDescriptor = characteristic.getDescriptor(uuid);
  2. UUID uuid = UUID.fromString(«00002902-0000-1000-8000-00805f9b34fb»); дескриптор BluetoothGattDescriptor = characteristic.getDescriptor(uuid);
  3. UUID uuid = convertFromInteger(0x2902); дескриптор BluetoothGattDescriptor = characteristic.getDescriptor(uuid);
  4. UUID.fromString(«6e400003-b5a3-f393-e0a9-e50e24dcca9e»);
  5. UUID.fromString(«6e400002-b5a3-f393-e0a9-e50e24dcca9e»);
  6. UUID.fromString(«6e400001-b5a3-f393-e0a9-e50e24dcca9e»);

во всех случаях дескриптор возвращает значение null, и я не могу установить значение уведомления дескриптора.

Сервер сообщил, что значение дескриптора не настроено на серверном устройстве, то же устройство работает нормально на IOS, но на Android уведомление не получено.

Я тестировал то же устройство с этим приложением:
https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox
Я могу получать уведомления с помощью этого приложения.
Вышеуказанное приложение прослушивает: 00002902-0000-1000-8000-00805f9b34fb для дескриптора
, но с тем же UUID я не могу получать уведомления.

Извините за мой английский.

Ответ №1:

Я нашел свой ответ после двухдневных исследований. Пожалуйста, смотрите справочное приложение для тестирования любого устройства BLE. Приложение запрашивает MTU для изменения, а затем включает уведомление.

Мои шаги по записи и прослушиванию уведомлений приведены ниже: сначала я устал запрашивать MTU, а затем записывать значение уведомления. После первой попытки с помощью токена уведомления дескриптор записывается успешно. После этого шага я могу писать и слушать с данного устройства. Я могу быть любым, кто сталкивается с такой же проблемой, поэтому, пожалуйста, рассмотрите приведенное выше приложение и проверьте журналы приложений. Каждый шаг будет понятен для данного приложения.