Android BLE(蓝牙 Gatt 描述符)始终为空
Android BLE (Bluetooth Gatt Descriptor) always null
有谁能帮忙吗
我正在开发低功耗蓝牙应用程序
作品已完成:
- 设备扫描
- 设备连接
- 写入远程设备Raspberry Pi
远程设备有服务id:
6e400001-b5a3-f393-e0a9-e50e24dcca9e
写入字符串是:
6e400002-b5a3-f393-e0a9-e50e24dcca9e
通知字符串是:
6e400003-b5a3-f393-e0a9-e50e24dcca9e
以上所有自定义服务在 IOS 和 Android 上都运行良好,无需监听远程设备通知。
我可以写:
gatt.writeCharacteristic(特征写入);
我可以通过以下方式启用通知:
gatt.setCharacteristicNotification(characteristicNotify, true);
但是当我尝试获取描述符时,描述符始终为空。
我试过:
- UUID uuid = UUID.fromString("00000001-0000-1000-8000-00805f9b34fb");
BluetoothGattDescriptor 描述符 =
characteristic.getDescriptor(uuid);
- UUID uuid = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb");
BluetoothGattDescriptor 描述符 =
characteristic.getDescriptor(uuid);
- UUID uuid = convertFromInteger(0x2902);蓝牙Gatt描述符
描述符 = characteristic.getDescriptor(uuid);
- UUID.fromString("6e400003-b5a3-f393-e0a9-e50e24dcca9e");
- UUID.fromString("6e400002-b5a3-f393-e0a9-e50e24dcca9e");
- UUID.fromString("6e400001-b5a3-f393-e0a9-e50e24dcca9e");
在所有情况下,描述符都是 return null,我无法设置描述符通知值。
服务器人员告诉服务器设备上未配置描述符值,同一设备在 IOS 上工作正常,但在 Android 上未收到通知。
我用这个应用程序测试了相同的设备:
https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox
我可以在这个应用程序的帮助下接收通知。
上面的应用监听 on:00002902-0000-1000-8000-00805f9b34fb for descriptor
但是使用相同的 UUID 我无法收到通知。
对不起我的英语。
经过两天的研究,我找到了答案。
请参阅参考应用程序以测试任何 BLE 设备。
应用更改请求 MTU,然后启用通知。
我编写和收听通知的步骤如下:
首先我厌倦了请求 MTU,然后写入通知值。在通知令牌的帮助下第一次尝试后,描述符被成功写入。
在那一步之后,我可以用给定的设备写和听。
我是任何面临同样问题的人,所以请考虑上面给出的应用程序并检查应用程序日志。给定的应用程序将清楚每一步。
有谁能帮忙吗
我正在开发低功耗蓝牙应用程序 作品已完成:
- 设备扫描
- 设备连接
- 写入远程设备Raspberry Pi
远程设备有服务id:
6e400001-b5a3-f393-e0a9-e50e24dcca9e
写入字符串是:
6e400002-b5a3-f393-e0a9-e50e24dcca9e
通知字符串是:
6e400003-b5a3-f393-e0a9-e50e24dcca9e
以上所有自定义服务在 IOS 和 Android 上都运行良好,无需监听远程设备通知。
我可以写: gatt.writeCharacteristic(特征写入);
我可以通过以下方式启用通知:
gatt.setCharacteristicNotification(characteristicNotify, true);
但是当我尝试获取描述符时,描述符始终为空。
我试过:
- UUID uuid = UUID.fromString("00000001-0000-1000-8000-00805f9b34fb"); BluetoothGattDescriptor 描述符 = characteristic.getDescriptor(uuid);
- UUID uuid = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"); BluetoothGattDescriptor 描述符 = characteristic.getDescriptor(uuid);
- UUID uuid = convertFromInteger(0x2902);蓝牙Gatt描述符 描述符 = characteristic.getDescriptor(uuid);
- UUID.fromString("6e400003-b5a3-f393-e0a9-e50e24dcca9e");
- UUID.fromString("6e400002-b5a3-f393-e0a9-e50e24dcca9e");
- UUID.fromString("6e400001-b5a3-f393-e0a9-e50e24dcca9e");
在所有情况下,描述符都是 return null,我无法设置描述符通知值。
服务器人员告诉服务器设备上未配置描述符值,同一设备在 IOS 上工作正常,但在 Android 上未收到通知。
我用这个应用程序测试了相同的设备:
https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox
我可以在这个应用程序的帮助下接收通知。
上面的应用监听 on:00002902-0000-1000-8000-00805f9b34fb for descriptor
但是使用相同的 UUID 我无法收到通知。
对不起我的英语。
经过两天的研究,我找到了答案。 请参阅参考应用程序以测试任何 BLE 设备。 应用更改请求 MTU,然后启用通知。
我编写和收听通知的步骤如下: 首先我厌倦了请求 MTU,然后写入通知值。在通知令牌的帮助下第一次尝试后,描述符被成功写入。 在那一步之后,我可以用给定的设备写和听。 我是任何面临同样问题的人,所以请考虑上面给出的应用程序并检查应用程序日志。给定的应用程序将清楚每一步。