Android蓝牙外围设备模式通知描述符

时间:2018-07-20 05:58:32

标签: android bluetooth notifications

我正在编写一个类似BLE外围设备的Android应用。

我的template_name派生类中有onDescriptorWriteRequest override

当我从名为LightBlue的BluetoothGattServerCallback应用程序订阅notifications时,会调用此方法,但是我似乎找不到任何方法来判断它是否传入IOSENABLE_NOTIFICATION_VALUE

我找到了一些我将其作为基础的代码,他们使用了DISABLE_NOTIFICATION_VALUE并将其与这些常量进行比较。

就我而言,description.getValue()不管我选择什么。

getValue() returns null的value参数有一个值,但它是一个onDescriptorWriteRequest()值,每次仅其中一部分会更改为看似随机的值,因此我无法确定哪个将启用,并且如果实际上使用的是什么值,则将其禁用。其值类似long

这是我正在使用的代码:

[B@633adb and [B@690f978

现在,它在 @Override public void onDescriptorWriteRequest (BluetoothDevice device, int requestId, BluetoothGattDescriptor descriptor, boolean preparedWrite, boolean responseNeeded, int offset, byte[] value) { super.onDescriptorWriteRequest(device, requestId, descriptor, preparedWrite, responseNeeded, offset, value); Log.i(TAG, "onDescriptorWriteRequest, uuid: " + descriptor.getUuid()); if (descriptor.getUuid().equals(UUID.fromString(notificationDescriptionUUID))) { if (descriptor.getValue().equals(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE)) { // this is how I keep track of which devices to notify later removeDeviceFromNotifyList(notifyDeviceList, device); notifyDeviceList.add(device); } else if (descriptor.getValue().equals(BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE)) { // this is how I keep track of which devices to notify later removeDeviceFromNotifyList(notifyDeviceList, device); } } // now tell the connected device that this was all successfull mBluetoothGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS, offset, value); } 上崩溃,因为descriptor.getValue().equals始终为getValue()

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

当中央要给描述符分配值时,调用onDescriptorWriteRequest函数。假设您的目的是通过检查BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUEBluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE

来检查中心是否要订阅/取消订阅。

为此,只需检查value参数是否等于这些预定义常量之一。 代码可以如下-

if ( Arrays.equals(value, BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE))
{
 //Your disable code 
}
else if (Arrays.equals(value, BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE))
{
//Your enable code
}

我尚未测试此代码。但是我相信这应该可行。