阅读documentation,可以认为setCharacteristicNotification
启用了BLE特征的通知:
启用或禁用给定的通知/指示 特性
但这种方法似乎不这样做?阅读BLE documentation on receiving BLE notifications,结果是一个多步骤过程,您必须调用此方法,然后将文件写入描述符。
如果是这种情况,那么setCharacteristicNotification
本身会做什么?
答案 0 :(得分:1)
需要描述符写入以告知远程设备发送通知。 setCharactersticNotification仅告知蓝牙堆栈它应该将任何收到的通知转发给应用程序。
答案 1 :(得分:-1)
在Why does setCharacteristicNotification() not actually enable notifications?读到的有趣内容。那里的答题者仔细研究了源代码和文档,以发现:
“ setCharacteristicNotification仅准备本地服务以接收通知。”
我建议使用设置通知的包装器功能,因为除了文档不清楚之外,在本地启用通知以及启用通知发送也是一个令人困惑的概念在外围设备上。我建议使用类似Enabling Bluetooth characteristic Notification in Android (Bluetooth Low Energy ) Not Working中的善良回答者所使用的东西:
public boolean setCharacteristicNotification(BluetoothGatt bluetoothGatt, BluetoothGattCharacteristic characteristic,boolean enable) {
Logger.d("setCharacteristicNotification");
bluetoothGatt.setCharacteristicNotification(characteristic, enable);
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(CHARACTERISTIC_UPDATE_NOTIFICATION_DESCRIPTOR_UUID);
descriptor.setValue(enable ? BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE : new byte[]{0x00, 0x00});
return bluetoothGatt.writeDescriptor(descriptor); //descriptor write operation successfully started?
}