这个问题不是关于Android notificatinos,而是关于BLE通知(标题可能暗示)
我已经在Android-L上运行了基本的BLE外设模式
有没有办法在Android-L预览中实现BLE通知。我可以做一些类似下面的事情,使charecteritic能够通知,但试图听
BluetoothGattCharacteristic firstServiceChar = new BluetoothGattCharacteristic(
UUID.fromString(serviceOneCharUuid),
BluetoothGattCharacteristic.PROPERTY_NOTIFY, BluetoothGattCharacteristic.PERMISSION_READ );
但在iOS上的LightBlue应用程序中,我无法订阅此特性。显然,没有API可以用来在订阅char时响应调用(就像在iOS中一样)
如果您已在Android-L
上成功启用BLE通知,请分享您的代码答案 0 :(得分:12)
除了OP所做的事情之外:
BluetoothGattCharacteristic firstServiceChar = new BluetoothGattCharacteristic(UUID.fromString(serviceOneCharUuid), BluetoothGattCharacteristic.PROPERTY_NOTIFY, BluetoothGattCharacteristic.PERMISSION_READ )
接下来是添加客户端特性配置描述符(UUID是使用蓝牙基础UUID的16位0x2902的128位版本),以便连接的设备可以告诉您它想要通知(或指示),然后将该描述符添加到您的特征中:
BluetoothGattDescriptor gD = new BluetoothGattDescriptor(UUID.fromString("00002902-0000-1000-8000-00805F9B34FB"), BluetoothGattDescriptor.PERMISSION_WRITE | BluetoothGattDescriptor.PERMISSION_READ);
firstServiceChar.addDescriptor(gD);
UUID来自蓝牙规范。显然,设备通过更新此描述符来订阅通知,因此您必须通过覆盖onDescriptorWriteRequest来处理BluetoothGattServerCallback:
@Override
public void onDescriptorWriteRequest (BluetoothDevice device, int requestId, BluetoothGattDescriptor descriptor, boolean preparedWrite, boolean responseNeeded, int offset, byte[] value) {
btClient = device; // perhaps add to some kind of collection of devices to update?
// now tell the connected device that this was all successfull
btGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS, offset, value);
}
现在更新您的值并通知连接人:
firstServiceChar.setValue("HI");
btGattServer.notifyCharacteristicChanged(btClient, firstServiceChar, false);
希望这个快速而又脏的代码会有所帮助,因为我首先使用的OP代码甚至可以使基本的外设模式工作:)