Android 即使调用停止广告方法,BLE 广告商也会传输信标,特别是当应用 returns 来自后台时

Android BLE advertiser transmits beacons even if stop advertising method is called, specifically when app returns from background

如果应用程序在前台并调用bleAdvertiser.stopAdvertising()方法,我可以停止广告。
当我的屏幕关闭并且我的应用程序仍在播放广告时,就会出现问题。该应用程序会在我的屏幕关闭时播放广告,这是预期的。但是,当我的应用程序进入前台并且我按下一个执行 bleAdvertiser.stopAdvertising() 的按钮时,BLE 信标仍然保持打开状态。我通过扫描名为 nRF Connect 的第三个 pert 应用程序对其进行了测试。
为了确定这不是 nRF Connect 应用程序问题,我使用检测 BLE 信标的硬件板对其进行了测试并获得相同结果,这意味着我的应用程序仍在发送信标。
当我 close/destroy 应用程序(在选项卡中横向滑动)时,信标停止。
我在我的应用程序中执行以下操作:

bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
bleAdvertiser = bluetoothAdapter.getBluetoothLeAdvertiser();
advertiseSettings = new AdvertiseSettings.Builder() ....
bleAdvertiser.startAdvertising(advertiseSettings, advertisedata, advertisingCallback);

按下按钮停止信标,我这样做:

bleAdvertiser.stopAdvertising(advertisingCallback);

我怀疑 advertisingCallback 变量与您第一次开始做广告时的实例不知何故不同。如果没有,停止将不起作用。

我建议您在启动和停止时都记录该实例以查找任何差异。 Android 应用生命周期回调很容易像这样意外地改变变量,从而导致这样的问题。