Bluetooth GATT - onServicesDiscovered(BluetoothGatt gatt, int status) не содержит всех Сервисов

У меня есть код, который подключается, а затем пытается обнаружить все Сервисы, предоставляемые пользовательским устройством BLE, рекламируя пользовательские Сервисы.

Код работает на

  • Nexus 5 с Android 5.1
  • Samsung SM-T320 с Android 4.4.2
  • ZTE Blade Vec 4G с Android 4.4.2

Код не работает на

  • Samsung SM-T360 с Android 4.4.4
  • Samsung GT-I9195 с Android 4.4.2

На устройствах, где происходит сбой, он часто обнаруживает все Сервисы BLE на одном (из двух) устройствах, которые рекламируют одни и те же Сервисы BLE. Перезапуск устройства Android и / или возня с wifi/bt заставляет его обнаруживать все Сервисы на другом устройстве BLE, но не на первом (!).

Кто-нибудь знает о выдающейся ошибке в устройствах Samsung, связанной с обнаружением службы BLE?

Имеет все услуги:

04-16 13:28:00.999: V/ScanningState(9741): onServicesDiscovered()
04-16 13:28:00.999: I/ScanningState(9741): The device has service 00001800-0000-1000-8000-00805f9b34fb
04-16 13:28:00.999: I/ScanningState(9741): The device has service 0000180a-0000-1000-8000-00805f9b34fb
04-16 13:28:00.999: I/ScanningState(9741): The device has service 0000180f-0000-1000-8000-00805f9b34fb
04-16 13:28:00.999: I/ScanningState(9741): The device has service f0ba0000-c6b5-11e2-8b8b-0800200c9a66
04-16 13:28:00.999: I/ScanningState(9741): The device has service f0ba0100-c6b5-11e2-8b8b-0800200c9a66
04-16 13:28:00.999: I/ScanningState(9741): The device has service f0ba1100-c6b5-11e2-8b8b-0800200c9a66

Недостающие услуги:

04-16 14:05:31.179: V/ScanningState(10710): onServicesDiscovered()
04-16 14:05:31.179: I/ScanningState(10710): The device has service 00001800-0000-1000-8000-00805f9b34fb
04-16 14:05:31.179: I/ScanningState(10710): The device has service 0000180a-0000-1000-8000-00805f9b34fb
04-16 14:05:31.179: I/ScanningState(10710): The device has service 0000180f-0000-1000-8000-00805f9b34fb
04-16 14:05:31.179: I/ScanningState(10710): The device has service f0ba0000-c6b5-11e2-8b8b-0800200c9a66
04-16 14:05:31.179: W/ScanningState(10710): Device is missing sensor service
04-16 14:05:31.179: W/ScanningState(10710): Device is missing storage service
04-16 14:05:31.179: I/ScanningState(10710): Candidate did not support required services

Для второго (неудачного) сканирования я также вижу следующие журналы:

04-16 14:24:26.310: D/BtGatt.GattService(2856): onGetCharacteristic() - address=00:07:80:13:14:33, status=133, charUuid=00000000-0000-0000-0000-000000000000, prop=0
04-16 14:24:26.310: D/BtGatt.btif(2856): btif_gattc_get_included_service
04-16 14:24:26.310: D/BtGatt.btif(2856): btgattc_handle_event: Event 1011
04-16 14:24:26.310: E/bt-btif(2856): No server cache available
04-16 14:24:26.310: E/BtGatt.btif(2856): bta_to_btif_uuid: Unknown UUID length 25104!

Обновить:

Дальнейшие исследования показывают, что onServicesDiscovered(BluetoothGatt gatt, int status) возвращает все службы BLE, если одновременно присутствует только одно устройство службы BLE. Какая-то утечка ресурсов в нижних слоях?

2 ответа

Решение

Хорошо, так что короткий ответ не звоните connectGatt(Context context, boolean autoConnect, BluetoothGattCallback callback) в любой другой теме, кроме основной.

Если я получил onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) при подключении к устройству я кешировал ссылку и позже вызывал connectGatt() внутри обратного вызова onConnectionStateChange(BluetoothGatt gatt, int status, int newState) после отключения от первого устройства. Это вызвало проблему, описанную в этом вопросе.

Я попытался запустить на интерфейсе, получил больше шансов обнаружить, но не достаточно (работает в 1/10 раза).

Эта проблема не возникает на Nexus 5 4.4.2 или 5.1 и Nexus 4 4.4, но на Samsung S5 (4.4.2) (по крайней мере).

Хитрость (объясняется во многих темах) заключалась в том, чтобы установить сон SystemClock.sleep(3000); в моем сервисе сразу после звонка mBluetoothGatt.discoverServices(), Я пытался поставить это раньше, но ничего не изменилось.

Надежда может кому-то помочь.

Другие вопросы по тегам