Ошибка Bluetooth GATT при выполнении onServicesDiscovered()

Эта проблема беспокоит меня в течение нескольких дней. Код для подключения Bluetooth отлично работает на устройствах первого типа (детектор сердечного ритма) с другими телефонами. Для устройств второго типа (также детектора сердечного ритма) они прекрасно работают с мобильными устройствами, такими как htc, asus. Тем не менее, большинство устройств второго типа не могут хорошо подключиться к Sony Xperia Z1~Z3, Samsung N5(я не уверен, что реальная модель).

Чтобы наблюдать logcat, произошла ошибка при вызове gatt.discoverServices(). Я вызываю этот метод в BluetoothGattCallback -> onConnectionStateChange -> newState == STATE_CONNECTED.

Это нормально, чтобы получить такие услуги:

05-04 12:08:15.678: D/BtGatt.btif(23132): btif_gattc_upstreams_evt: Event 7
05-04 12:08:15.678: D/BtGatt.GattService(23132): onSearchResult() - address=F9:CE:5F:A3:69:CF, uuid=00001800-0000-1000-8000-00805f9b34fb
05-04 12:08:15.678: D/BluetoothGatt(22365): onGetService() - Device=F9:CE:5F:A3:69:CF UUID=00001800-0000-1000-8000-00805f9b34fb

Но здесь я получил шесть услуг, в другом устройстве я получил семь услуг. (потерять одну настройку UUID)

оказание услуг:

onGetService() - Device=F9:CE:5F:A3:69:CF UUID=00001800-0000-1000-8000-00805f9b34fb
onGetService() - Device=F9:CE:5F:A3:69:CF UUID=00001801-0000-1000-8000-00805f9b34fb
onGetService() - Device=F9:CE:5F:A3:69:CF UUID=0000180a-0000-1000-8000-00805f9b34fb
onGetService() - Device=F9:CE:5F:A3:69:CF UUID=0000180d-0000-1000-8000-00805f9b34fb
onGetService() - Device=F9:CE:5F:A3:69:CF UUID=6c721838-5bf1-4f64-9170-381c08ec57ee
onGetService() - Device=F9:CE:5F:A3:69:CF UUID=6c721550-5bf1-4f64-9170-381c08ec57ee

Ниже приведены выдержки из logcat, которые я считаю неверным результатом:

05-04 12:08:15.678: D/BtGatt.btif(23132): btif_gattc_get_characteristic
05-04 12:08:15.678: D/BtGatt.btif(23132): btgattc_handle_event: Event 1007
05-04 12:08:15.678: E/bt-btif(23132): No server cache available
05-04 12:08:15.678: D/BtGatt.GattService(23132): onGetCharacteristic() - address=F9:CE:5F:A3:69:CF, status=133, charUuid=449e4528-7633-6ccc-8000-00805f9b34fb, prop=2
05-04 12:08:15.678: D/BtGatt.btif(23132): btif_gattc_get_included_service
05-04 12:08:15.678: D/BtGatt.btif(23132): btgattc_handle_event: Event 1011
05-04 12:08:15.678: E/bt-btif(23132): No server cache available
05-04 12:08:15.678: E/BtGatt.btif(23132): bta_to_btif_uuid: Unknown UUID length 30209!
05-04 12:08:15.688: D/BtGatt.GattService(23132): onGetIncludedService() - address=F9:CE:5F:A3:69:CF, status=133, uuid=00001800-0000-1000-8000-00805f9b34fb, inclUuid=449e4528-7633-6ccc-8000-00805f9b34fb
05-04 12:08:15.688: D/BtGatt.GattService(23132): continueSearch() - connid=5, status=0

Эти logcat повторяются шесть раз для каждой службы в начале с одинаковым характеристическим UUID = 449e4528-7633-6ccc-8000-00805f9b34fb. И этот UUID не появился в другом удачном случае.

характеристика: (просто вставьте другую часть)

onGetIncludedService() - address=F9:CE:5F:A3:69:CF, status=133, uuid=00001800-0000-1000-8000-00805f9b34fb, inclUuid=449e4528-7633-6ccc-8000-00805f9b34fb
onGetIncludedService() - address=F9:CE:5F:A3:69:CF, status=133, uuid=00001801-0000-1000-8000-00805f9b34fb, inclUuid=449e4528-7633-6ccc-8000-00805f9b34fb
onGetIncludedService() - address=F9:CE:5F:A3:69:CF, status=133, uuid=0000180a-0000-1000-8000-00805f9b34fb, inclUuid=449e4528-7633-6ccc-8000-00805f9b34fb
onGetIncludedService() - address=F9:CE:5F:A3:69:CF, status=133, uuid=0000180d-0000-1000-8000-00805f9b34fb, inclUuid=449e4528-7633-6ccc-8000-00805f9b34fb
onGetIncludedService() - address=F9:CE:5F:A3:69:CF, status=133, uuid=6c721838-5bf1-4f64-9170-381c08ec57ee, inclUuid=449e4528-7633-6ccc-8000-00805f9b34fb
onGetIncludedService() - address=F9:CE:5F:A3:69:CF, status=133, uuid=6c721550-5bf1-4f64-9170-381c08ec57ee, inclUuid=449e4528-7633-6ccc-8000-00805f9b34fb

Я нашел похожий вопрос: onServiceDiscoverd не содержит все службы

Но я вызываю каждый device.connectGatt() в runOnUiThread после onLeScan(), я также пытался вызвать конкретный адрес для метода при нажатии кнопки (обязательно запустите OnUiThread).

BluetoothDevice device = mBluetoothAdapter.getRemoteDevice("F4:36:8C:9B:87:87");
device.connectGatt(this, false, mGattCallback);

Это решение не работает.

Я также попытался закрыть Wi-Fi и перезагрузить Bluetooth. Это работает для mi2, но не xperia Z1.

У кого-нибудь есть идеи? Большое спасибо!:)

0 ответов

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