执行onServicesDiscovered()时出现蓝牙GATT错误

时间:2015-05-08 07:00:38

标签: android bluetooth-lowenergy samsung-mobile sony-xperia

这个问题困扰了我几天。蓝牙连接代码在第一种设备(心率检测器)上与其他手机一起工作正常。对于第二种设备(也是心率检测器),它们可以与移动设备(如htc,asus)一起使用。然而,大多数第二类设备无法很好地连接到sony xperia Z1~Z3,三星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

但是我在这里获得了6项服务,在其他设备中我获得了7项服务。 (丢失一个自定义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 does not contain all service

但是我在onLeScan()之后调用runOnUiThread中的每个device.connectGatt(),我也尝试在单击按钮时调用该方法的特定地址(确保runOnUiThread)。

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

此解决方案不起作用。

我也尝试关闭wifi并重新启动蓝牙。这适用于mi2,但不适用于xperia Z1。

有没有人有任何想法?非常感谢! :)

0 个答案:

没有答案