广告停止时,Android应用程序的Bluetooth BLE扫描停止。为什么?

时间:2019-11-20 15:31:28

标签: android bluetooth bluetooth-lowenergy scanning

我有一个运行在移动设备上的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);

1 个答案:

答案 0 :(得分:0)

在Android的蓝牙堆栈中,扫描和广告完全独立。所有操作都简单地发送到蓝牙芯片,由固件来扫描和做广告。

通常只有一个无线电设备的蓝牙芯片需要安排扫描和广告投放时间,因为一次只能执行一项操作。

显然您看到了这种效果。不同的蓝牙芯片制造商使用的调度算法是专有的,通常不公开。您必须询问使用的特定设备的制造商为何它们以特定方式运行。

但是,Android发送扫描间隔提示。在Android中,间隔为5秒,因此可能会影响您的结果。