iOS および Android 7.0 の特定のサービス/特性 UUID で正常に動作する BLE 周辺機器があります。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 / など)。さらに、onDescriptorWrite コールバックは GATT_SUCCESS を返します。ただし、コードの後半で記述子を読み取ると、通知値がまだ無効に設定されていることがわかります。setCharacteristicNotification 呼び出しと writeDescriptor 呼び出しの間に遅延を置くなど、多くの解決策を試しましたが、この問題の解決策は見つかりませんでした。問題の周辺機器とのペアリングは問題ありませんが、通知を取得することはどういうわけか不可能のようです. ヒントをいただければ幸いです。