android ble 通知,Android BLE GATT外围模式通知
我正在尝试使用Android 5.0(21)API将应用设置为BLE外围设备.到目前为止,我已经设置了服务器,使广告和连接正常工作,设置了自定义GATT服务和特性,并且可以在外围设备与其他测试设备之间进行读写.现在,我尝试将通知添加到一些参数中,但简而言之;他们没有工作.定义这些特征时,它们包括notify属性:BluetoothGattService battService = new Blue
我正在尝试使用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 write:”消息;但不会记录此类消息(调试器也不会进入该函数).
我稍后尝试使用以下方式发送通知:
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)