我正在编写一个类似BLE外围设备的Android应用。
我的template_name
派生类中有onDescriptorWriteRequest
override
。
当我从名为LightBlue的BluetoothGattServerCallback
应用程序订阅notifications
时,会调用此方法,但是我似乎找不到任何方法来判断它是否传入IOS
或ENABLE_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()
。
任何帮助将不胜感激。
答案 0 :(得分:0)
当中央要给描述符分配值时,调用onDescriptorWriteRequest
函数。假设您的目的是通过检查BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE
或BluetoothGattDescriptor.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
}
我尚未测试此代码。但是我相信这应该可行。