从远程BLE设备读取超过20个字节在Lollipop中失败

时间:2016-03-03 12:23:28

标签: android bluetooth bluetooth-lowenergy

从远程BLE设备读取特征时,我们面临一个问题。

此问题发生在Android OS 5.0及更高版本。

以下几点产生问题:

  
      
  1. 制作一个具有一个服务和一个特征的外围设备。
  2.   
  3. 特征只有读取权限。现在设置这个特征的值超过20个字符,即20个字节。
  4.   
  5. 现在让外围设备通过一个服务和一个特征来广播自己。
  6.   
  7. 现在从市场上推出任何BLE扫描仪应用程序并连接此外围设备。
  8.   
  9. 一旦成功连接外围设备,只需尝试读取特性。
  10.   
  11. 在这种情况下,它不会显示任何数据,在调试应用程序时,它会显示它返回空数据。
  12.   
  13. 以上相同的情况在Android OS 5.0及以上版本中无效。
  14.   
  15. 在android 4.4中使用的相同案例。
  16.   

因此Android OS 5.0及更高版本中发生了一些变化,内部禁用readblob()请求,可以读取超过20个字符的数据。

1 个答案:

答案 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?