我尝试使用Android 5.0(21)api设置应用程序以充当BLE外围设备。到目前为止,我已经设置了服务器,广告和连接工作,设置了自定义GATT服务和特性,并且可以在外围设备和其他测试设备之间进行读写。现在我尝试向一些参数添加通知,但只是简单地说;他们没有工作。
定义这些特征时,它们包括notify属性:
BluetoothGattService battService = new BluetoothGattService(BatteryProfile.UUID_BATTERY_SERVICE, BluetoothGattService.SERVICE_TYPE_PRIMARY);
BluetoothGattCharacteristic batteryLevelCharacteristic =
new BluetoothGattCharacteristic(BatteryProfile.UUID_BATTERY_LEVEL,
BluetoothGattCharacteristic.PROPERTY_READ | BluetoothGattCharacteristic.PROPERTY_NOTIFY,
BluetoothGattCharacteristic.PERMISSION_READ);
battService.addCharacteristic(batteryLevelCharacteristic);
mGattServer.addService(battService);
在我的BluetoothGattServerCallback
中,我添加了方法:
@Override
public void onDescriptorWriteRequest(BluetoothDevice device, int requestId, BluetoothGattDescriptor descriptor, boolean preparedWrite, boolean responseNeeded, int offset, byte[] value) {
Log.d(TAG, "Descriptor write: " + descriptor.toString());
if (responseNeeded) {
mGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS, 0, value);
}
super.onDescriptorWriteRequest(device, requestId, descriptor, preparedWrite, responseNeeded, offset, value);
}
我希望记录" Descriptor写道:"客户端启用通知(或写入任何描述符)时的消息;但是没有记录这样的消息(调试器也没有进入该功能)。
我稍后尝试使用以下方式发送通知:
BluetoothGattCharacteristic batteryLevelCharacteristic = service.getCharacteristic(BatteryProfile.UUID_BATTERY_LEVEL);
batteryLevelCharacteristic.setValue(new byte[]{ mBatteryLevel });
mGattServer.notifyCharacteristicChanged(mConnectedDevice, batteryLevelCharacteristic, false);
其中,虽然它更新了价值;它不会向连接的客户端发送通知。
我已经在Nexus 5X上使用Android 6.0.1对此进行了测试(很遗憾,这是我唯一可以测试的Android设备)。在那里使用外围设备/ BluetoothGattServer API的例子并不多,所以我有点迷失。是否有一些方法我忘记打电话,或者我需要做些什么来做一些无证的订单以获得通知工作?
非常感谢任何帮助!
答案 0 :(得分:3)
我不知道您是否已找到解决方案。但我认为您可以尝试为您需要通知的特性定义客户端配置特征描述符。
这可以按照这篇文章中的说明完成。 Any way to implement BLE notifications in Android-L preview