Android 蓝牙适配器不发射 ACTION_DISCOVERY_FINISHED

Android bluetoothadapter not emitting ACTION_DISCOVERY_FINISHED

我有一个 class 带有广播接收器设置。接收器侦听以下操作:

ACTION_FOUND
ACTION_DISCOVERY_STARTED
ACTION_DISCOVERY_FINISHED

发现和启动的操作按预期发出,但是,BluetoothAdapter 的文档指定发现扫描应该需要大约 12 秒,然后是 ACTION_DISCOVERY_FINISHED。情况似乎并非如此,因为我只能通过调用 cancelDiscovery() 手动触发已完成操作的发射。如果我离开它 运行 足够长,有时会发出事件(但这可能需要 1-2 分钟以上)。有时,这甚至不会发生。如果我继续通过禁用蓝牙强制结束扫描,则会按预期发出操作。

扫描需要这么长时间吗,我是否应该手动控制扫描过程,即在 12 秒倒计时后自行结束?或者我在文档中遗漏了什么。 broadcastreceiver配置正确,所有动作的到来都证明了这一点。

在将 Nexus 5 升级到 android 版本 6.0.1 之后,我似乎得到了与 ACTION_DISCOVERY_FINISHED 广播更一致的结果。根据 https://developer.android.com/about/versions/marshmallow/android-6.0-changes.htm 的变化,我的另一个 android phone (Xperia Z3) 也没有找到任何设备,这意味着它现在也需要 ACCESS_COARSE_LOCATION 权限,您需要在运行时请求。如果不这样做,您的应用程序将不会收到广播。我希望其他人觉得这很有用。