Android ble,requestConnectionPriority无效

时间:2017-11-25 23:24:31

标签: android bluetooth bluetooth-lowenergy android-bluetooth

我正在尝试使用蓝牙低能量通知在2个Android设备之间每30毫秒发送10个字节的数据。目标是实现低延迟通信,对低能耗没有兴趣。

您可以在Delay graph(Y field = delta time between packets)中查看结果。通信正在进行的前10秒就足够了。 (数据包之间的间隔最大为30-40ms)。然而,在第10秒之后,间隔要么极高,要么极低。

这可能是由于非严格的连接间隔参数而发生的。您可以查看hci_events的样本,该样本清楚地显示减速是由hci_events引起的。

我试图配置连接的参数,从master调用函数

requestConnectionPriority

然而,它并没有改变结果图上的任何内容。我还使用wireshark检查数据包,发现主服务器甚至没有发送配置连接间隔的请求。我还尝试了

的另一个配置请求
requestMtu

具有完全相同的结果,没有从主服务器发送更新数据包。

因此,从这些观察中可以看到两个问题。

  • 为了确保低能耗,在第10秒超时?如果是,我该如何禁用它?
  • 调用requestConnectionPriority是否有些错误,从android 6.0.1开始具有中心(master)的作用?你能给我一个关于如何被正确调用的简单例子吗?

请注意,在requestConnectionPriority的{​​{1}}中建立连接后,系统会立即调用onConnectionStateChange

具有从属(服务器)角色的设备正在运行(Android 5.1.1)且主(客户端)正在运行(Android 6.0.1)。

非常感谢!

重要更新:提及设备之间启动连接的方式至关重要。

  • 中央设备会调用BluetoothGattCallback,其中设备为device.connectGatt。地址是硬编码字符串,即外围设备的公共mac地址。您可以查看logcat logshci logs
  • 我也尝试使用合法方法连接(外围设备广告并连接到已扫描的随机地址),但我收到错误并发起直接连接失败,拓扑限制'您可以查看logcat logshci logs

1 个答案:

答案 0 :(得分:1)

  

为了确保低能耗,在第10秒有超时吗?如果是,我该如何禁用它?

没有

  

调用requestConnectionPriority是否有些错误,从android 6.0.1中带有中心(master)的角色?你能给我一个关于如何被正确调用的简单例子吗?

我不知道有关requestConnectionPriority的任何错误。但是你可以尝试在onServicesDiscovered回调之后执行该方法。在GATT服务发现期间,Android会暂时将连接间隔更改为7.5毫秒,因此如果您不等到服务发现完成,可能会感到困惑。

关于requestMtu,请确保在没有其他GATT操作未决的情况下执行该方法(否则它不会起作用)。

另外一个提示是使用空气嗅探器,而不仅仅是查看hci日志。