我的BluetoothAdapter.startLeScan()在Lollipop API21中无法正常工作

时间:2015-03-18 10:54:18

标签: android bluetooth-lowenergy android-5.0-lollipop android-bluetooth

我是否需要使用BluetoothLeScanner类来扫描Lollipop的BLE设备?

Lollipop中的BluetoothAdapter.startLeScan()问题: - 中央设备无法在少数BLE扫描时间段内搜索外围设备发送的广告数据包。虽然它是在一些扫描间隔中找到广告,并执行任务(我的应用目标)。但我希望它能在每个时间间隔内找到广告。我使用的时间间隔高达10秒。

是否存在棒棒糖兼容性问题?我读过在棒棒糖中使用startLeScan()已被弃用,但我们可以使用它,它应该可以正常工作。哪里错了?任何帮助?

1 个答案:

答案 0 :(得分:0)

问题实际上是我用于开发的Nexus 7设备(也是nexus 4)。后来我用nexus 5尝试了我的代码,没有这样的问题。

<强>原因: 在Nexus 4和Nexus 7上,当找到新设备或传感器不可连接时,将调用回调。在后一种情况下,您将不断获得RSSI更新。

可连接设备的广告比不可连接设备更复杂。 它还需要2个数据包:扫描请求和扫描响应。手机必须从设备请求更多广告数据。由于adv数据可能大于单个数据包允许的31个字节(对于不可连接的设备)。

Nexus 4和Nexus 7每台设备只发送一次扫描请求。如果在扫描完数据包之后,他们都没有调用leScan回调。

在不可连接设备的情况下,每次收到adv数据包时都会调用回调。 我记得Nexus 5为同一台设备多次发送扫描请求,但我不确定。

令人非常不安的是,它在某些设备上的工作方式不同,并且未指定正确的行为。最好的解决方案是将一个参数添加到startLeScan(boolean showDevicesMultipleTimes)或将其标准化为Nexus 5行为。

此Android问题的链接:

https://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&groupby=&sort=&id=65863

我建议的Nexus 7和Nexus 4解决方案: 我将我的信标切换到不可连接模式,我的代码在所有设备上运行正常。