我有一个在移动设备上运行的 Android 6 - 23 级应用程序,它同时发布和扫描 BLE 无连接数据包。
问题:
我发现当我调用 stopAdvertising() 时,连续运行的 BLE 扫描操作会暂停或停止工作 1-4 秒,然后再次恢复。我知道这一点,因为我可以很容易地看到每 0.10 秒持续收到的广告数据包在 1-4 秒内没有收到。这意味着当广告操作以编程方式停止时,扫描操作将暂停或停止。
我如何定期启动和停止 BLE 广播,不会对 BLE 扫描操作造成不利影响?
我尝试使用不同的 Android 版本 API 开发我的应用程序,但都遇到了同样烦人的扫描暂停问题: 安卓 6 - 23 级 安卓 8 级 26
仅供引用,以下是一些 Android 6 代码 fragment :
// create advertiser and save in list, so advertising instance can be stopped in future.
mBluetoothAdvertiser = mBluetoothAdapter.getBluetoothLeAdvertiser();
// start advertising!
mBluetoothAdvertiser.startAdvertising( settings, data, mBluetoothAdvertiseCallback );
// do some work...
// TESTED BAD - the call below causes the BLE scan operation to halt for 1-4 seconds.
mBluetoothAdvertiser.stopAdvertising(mBluetoothAdvertiseCallback);
最佳答案
在安卓的蓝牙栈中,扫描和广告是完全独立的。所有操作都简单地发送到蓝牙芯片,并由其固件进行扫描和广播。
通常只有一个 radio 的蓝牙芯片需要调度扫描和广告,因为同时只能执行一个操作。
显然你看到了这个效果。不同蓝牙芯片制造商使用的调度算法是专有的,通常不公开。您必须询问您正在使用的特定设备的制造商,为什么他们会以特定方式运行。
不过,Android 会发送扫描间隔的提示。在 Android 中,间隔为 5 秒,因此这可能会影响您的结果。
关于Android 应用程序的蓝牙 BLE 扫描在广告停止时停止。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58957998/