其他分享
首页 > 其他分享> > android-蓝牙LE广告周期性地启动和停止时失败

android-蓝牙LE广告周期性地启动和停止时失败

作者:互联网

我已经尝试过蓝牙LE广告,即使用Android手机作为BLE“外围”设备.启动和停止恒定的广告一次可以很好地工作,但是如果我想实际传输一些变化的数据,则需要一个周期地启动,停止和重新启动广告,并始终更改广告包.

我当然使用这些方法:
BluetoothLeAdvertiser.startAdvertising()
BluetoothLeAdvertiser.stopAdvertising()

至少在Motorola Moto G 4G第二代上. (XT1072)和Android 5.0.2,该循环仅运行了一段时间,然后蓝牙堆栈出现了问题,无法再开始新的广告.快速运行周期时,这种情况会很快发生;如果运行缓慢,则需要花费更多时间,因此可能与缓冲区的填充有关.

我的问题是:在摩托罗拉以外的其他设备上也会发生这种情况吗?

(当然也欢迎其他任何相关评论.)

从理论上讲,它可能取决于某些制造商特定的HAL实施方式等.因此,我想知道我是否应该再购买另一台设备来进行此工作,因为来自Google / Motorola的任何修复程序都将花费一些时间.

这个测试应用.可以用来尝试:

https://bitbucket.org/MarkusKauppinen/bleadvertisertest

如果一切顺利,它将很高兴永远保持广告投放,并且如果此问题再次出现,它将在几分钟左右的时间内显示一个对话框.如果您的设备根本不支持Bluetooth LE广告或BLE,它将崩溃. (这只是一个快速而肮脏的测试应用程序.)

重现此问题的另一种简便方法是从https://github.com/devunwired/accessory-samples运行“ bluetoothadvertiser”应用程序,并保持快速点击UI上的“ Updateadvertise”按钮一段时间.

额外细节:

Lollipop中添加了对蓝牙LE外设模式的支持(广告需要),而在4.x中不可用.仅某些设备支持外设模式.兼容性至少包含在:

https://altbeacon.github.io/android-beacon-library/beacon-transmitter-devices.html
Chipsets/Devices supporting Android 5 BLE peripheral mode
chipsets supporting BLE peripheral role on Android 5

例如,这些设备应获得以下支持:摩托罗拉Moto E 4G(2015),摩托罗拉Moto G 4G(第二代),索尼Xperia M4 Aqua,中兴Blade S6,摩托罗拉Moto X(2014),三星Galaxy S6,谷歌Nexus 6 ,Google Nexus 9,HTC One M9,三星Galaxy S6 Edge.

至于“脏细节”,在发生这种情况之前,我总是可以在LogCat中看到“ GKI_Exception”:

GKI_exception(): 65524 getbuf: out of buffers

在第一个“ GKI_Exception”之后不久,广告因AdvertiseCallback.ADVERTISE_FAILED_INTERNAL_ERROR而失败.线…

E/BtGatt.btif? ### ASSERT :
external/bluetooth/bluedroid/main/../btif/src/btif_gatt_client.c line
803 Context transfer failed! (3) ###

…可能相关,但我对BlueDroid不熟悉.所述断言在这里:

https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/android-5.0.2_r1/btif/src/btif_gatt_client.c#803

一些可能相关的问题:
https://code.google.com/p/android/issues/detail?id=65455<-我为此添加了一些注释和日志文件.
https://code.google.com/p/android-developer-preview/issues/detail?id=1753
Scanning large number of BLE Tags
Bluetooth Crash on Samsung S4

解决方法:

我在Moto G 2nd Gen上测试了您的应用,并遇到了同样的问题.

我在运行Android 6.0的Nexus 9平板电脑上进行了尝试,但无法重现该错误,而且似乎可以正常使用.同样,在具有Android 5.1.1的关系播放器上,它似乎可以正常运行.
因此,这实际上是Moto G的问题,或者-我认为更可能是-Android 5.0.2的一个错误,该错误在更高版本中得到了解决.

标签:android-bluetooth,android,bluetooth-lowenergy
来源: https://codeday.me/bug/20191010/1887377.html