如何检测蓝牙设备是不是超出范围,或者我们丢失了它?

Posted

技术标签:

【中文标题】如何检测蓝牙设备是不是超出范围,或者我们丢失了它?【英文标题】:How to detect if bluetooth device out of range, or we lost it?如何检测蓝牙设备是否超出范围,或者我们丢失了它? 【发布时间】:2015-06-15 11:52:46 【问题描述】:

对于找到的蓝牙设备,我们会收到来自 android 的带有操作的 Brodcast:

if (BluetoothDevice.ACTION_FOUND.equals(action)) 
    // New bluetooth device found    

当我们将设备设置为可发现时,就会发生这种情况。

我的问题是当设备可发现关闭或其他设备的蓝牙关闭时触发的意图是什么。

在我的列表视图中,我正在显示“已找到”的设备,我可以使用上述代码执行此操作。但我想删除不再在范围内、不再可发现或已关闭蓝牙的设备的条目 Android 平台是否有任何特定意图?

我浏览过BluetoothDeviceBluetoothAdapter 参考APIs。但是没有发现任何有用的广播动作。

【问题讨论】:

我也有同样的问题,还在努力。 This 应该可以帮到你。 @Strider 我已经完成了。这在我的情况下不起作用。 您无法检测到“找到”设备何时关闭蓝牙或超出范围,除非您重新扫描 @Strider,我认为这是目前唯一的方法。重新扫描并将结果与​​上次扫描进行比较,并消除在新扫描中消失的条目。但那很贵。 【参考方案1】:

您要搜索的意图是BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED

Intent 用于将本地蓝牙适配器的连接状态更改广播到远程设备的配置文件。

此意图将有 3 个附加功能:

EXTRA_CONNECTION_STATE - 当前连接状态。 EXTRA_PREVIOUS_CONNECTION_STATE - 之前的连接状态。 EXTRA_DEVICE - 远程设备。

EXTRA_CONNECTION_STATEEXTRA_PREVIOUS_CONNECTION_STATE 可以是:

STATE_DISCONNECTED STATE_CONNECTING STATE_CONNECTED STATE_DISCONNECTING

【讨论】:

感谢您的回复。发生了什么我已经实现了 BluetoothDevice.ACTION_FOUND 范围内的任何设备都会打开蓝牙并且可以发现它会弹出到我的列表中。但是当它被关闭时可发现或蓝牙它应该从列表中删除,上面的意图在这种情况下会起作用吗? 我已经有了这个 ACTION_CONNECTION_STATE_CHANGED 但不能正常工作 你必须根据你收到的状态来管理你的应用程序设备,但是AFAIK,是的,它也适用于STATE_DISCONNECTING 您好,我已按照您的建议添加了过滤器。我在 onReceive(Context context, Intent intent) final String action = intent.getAction();但是当其他设备超出范围、离开或不再可发现时,看不到任何意图触发。这种情况可能吗?谢谢@Jordi Castilla。 这仅在您连接到设备时有效,如果您只是观察广播则无效

以上是关于如何检测蓝牙设备是不是超出范围,或者我们丢失了它?的主要内容,如果未能解决你的问题,请参考以下文章

检测设备是不是超出 wifi 范围

当设备已经在 Beacon 范围内时无法检测到 Beacon 然后我们打开蓝牙 & 应用程序被杀死

iOS : Homekit - 如何检测设备中是不是启用蓝牙和 WiFi 服务?

CoreBluetooth:检测设备超出范围/连接超时

如何使用核心蓝牙 sdk 扫描蓝牙设备?

如何检测我的苹果设备是不是支持蓝牙低功耗