我有一个运行在移动设备上的Android 6-23级应用程序,该应用程序同时发布和扫描BLE无连接数据包。
问题:
我发现当我调用stopAdvertising()时,连续运行的BLE扫描操作被暂停或停止工作1-4秒,然后再次恢复。我知道这一点是因为我可以很容易地看到每0.10秒连续收到的广告包在1-4秒钟内没有收到。这意味着在以编程方式停止播发操作时,扫描操作将停止或停止。
如何定期启动和停止BLE广告而又不会对BLE扫描操作造成不利影响?
我尝试使用具有相同烦人的扫描暂停问题的不同Android版本API开发应用程序: Android 6-23级 Android 8 26级
仅供参考,以下是一些Android 6代码片段:
// 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);
答案 0 :(得分:0)
在Android的蓝牙堆栈中,扫描和广告完全独立。所有操作都简单地发送到蓝牙芯片,由固件来扫描和做广告。
通常只有一个无线电设备的蓝牙芯片需要安排扫描和广告投放时间,因为一次只能执行一项操作。
显然您看到了这种效果。不同的蓝牙芯片制造商使用的调度算法是专有的,通常不公开。您必须询问使用的特定设备的制造商为何它们以特定方式运行。
但是,Android发送扫描间隔提示。在Android中,间隔为5秒,因此可能会影响您的结果。