我有一个BLE外围设备,可以在iOS和Android 7.0上使用给定的服务/特性UUID。在Android 6.0 Marshmallow上,尽管在描述符上设置了ENABLE_NOTIFICATION_VALUE,onCharacteristicChanged方法也不会触发。请帮我弄清楚如何让运行Android OS 6.0 Marshmallow的Android设备启动onCharacteristicChanged。以下是我尝试使用通知的代码:
boolean success = mBluetoothGatt.setCharacteristicNotification(characteristic, true);
Log.e(TAG, "set char notification = " + (success ? "It worked :)" : "It did not work :("));
if (UUID_DATA_PACKET.equals(characteristic.getUuid())) {
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
UUID.fromString(EkoCoreGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
success = mBluetoothGatt.writeDescriptor(descriptor);
Log.e(TAG, "set descriptor = " + descriptor.getCharacteristic().getWriteType() + ", success = " + (success ? "It worked :)" : "It did not work :("));
}
在上面的代码中,setCharacteristicNotification和writeDescriptor调用都返回成功(1 / true / etc)。此外,onDescriptorWrite回调返回GATT_SUCCESS。但是,当我们在代码中稍后读取描述符时,发现通知值仍设置为禁用。我们已经尝试了许多解决方案,例如在setCharacteristicNotification和writeDescriptor调用之间设置延迟,但是没有找到解决此问题的方法。与相关外围设备配对没有问题,但获取通知似乎有点不可能。任何提示将不胜感激。
答案 0 :(得分:0)
在编写描述符之前添加以下内容修复了我的问题:
characteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT);
显然Android 6中存在一些错误。我希望这个答案可以帮助其他人。很难找到。