我正在开发一个需要与蓝牙 LE 设备通信的应用程序。
这是我用来设置 CharacteristicNotification 的代码
public boolean setCharacteristicNotification(
BluetoothGattCharacteristic characteristic, boolean enable) {
if(mBluetoothAdapter == null || mBluetoothGatt == null) {
Log.w(TAG, "BluetoothAdapter not initialized");
return false;
}
Log.v(TAG, "setCharacteristicNotification(): uuid=" + characteristic.getUuid() + " enabled=" + enable);
boolean notifications = mBluetoothGatt.setCharacteristicNotification(characteristic, enable);
if(notifications) {
Log.v(TAG, "setCharacteristicNotification(): Notifications are enabled");
}
else {
Log.w(TAG, "setCharacteristicNotification(): Notifications are not enabled for characteristic " + characteristic);
}
BluetoothGattDescriptor desc = characteristic.getDescriptor(
UUID.fromString(FBGattAttributes.CHARACTERISTIC_CLIENT_CONFIG));
desc.setValue(enable ?
BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE :
new byte[]{0x00, 0x00}
);
boolean ok = mBluetoothGatt.writeDescriptor(desc);
if(ok){
Log.v(TAG, "wrote descriptor value for notification: ok=" + ok);
}else{
Log.w(TAG, "writeDescriptor failed: we will not get notifications=" + ok);
}
return ok;
}
在此代码中“mBluetoothGatt.writeDescriptor(desc);” 有时返回 false 这就是我无法从 BluetoothGatt 获得任何通知的原因。我不知道如何解决这个问题。
这个问题只发生在 LG G2 的 OS 5.02 之前,它有 4.4 问题不是那么频繁,但在更新之后,除了第一次之外,我每次都得到“假”。如果我们在连接后第一次尝试设置通知,它会起作用,一旦我断开连接并尝试连接,它总是会返回 False。我需要杀死并重新启动应用程序才能再次工作。有谁知道为什么这不起作用?提前致谢