从远程BLE设备读取特征时,我们面临一个问题。
此问题发生在Android OS 5.0
及更高版本。
以下几点产生问题:
- 制作一个具有一个服务和一个特征的外围设备。
- 特征只有读取权限。现在设置这个特征的值超过20个字符,即20个字节。
- 现在让外围设备通过一个服务和一个特征来广播自己。
- 现在从市场上推出任何BLE扫描仪应用程序并连接此外围设备。
- 一旦成功连接外围设备,只需尝试读取特性。
- 在这种情况下,它不会显示任何数据,在调试应用程序时,它会显示它返回空数据。
- 以上相同的情况在Android OS 5.0及以上版本中无效。
- 在android 4.4中使用的相同案例。
醇>
因此Android OS 5.0及更高版本中发生了一些变化,内部禁用readblob()
请求,可以读取超过20个字符的数据。
答案 0 :(得分:0)
这可以通过将数据分成20个字节的数据包并在发送每个数据包之间实现短延迟(即使用sleep())来实现。
您可以使用BluetoothGatt.requestMtu()
。请参阅Official document of BluetoothGatt.requestMtu
Request an MTU size used for a given connection.
When performing a write request operation (write without response), the data
sent is truncated to the MTU size. This function may be used to request a larger MTU size to be able to send more data at once.
A onMtuChanged(BluetoothGatt, int, int) callback will indicate whether this operation was successful.
Requires BLUETOOTH permission.
如果要发送更多20个字节,则应定义数组byte []包括所需的数据包数。 有一个例子Android: Sending data >20 bytes by BLE
还有另一个例子How to send more than 20 bytes data over ble in android?