【问题标题】: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,我认为这是目前唯一的方法。重新扫描并将结果与​​上次扫描进行比较,并消除在新扫描中消失的条目。但那很贵。

标签: java android android-intent bluetooth broadcastreceiver


【解决方案1】:

您要搜索的意图是BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED

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

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

EXTRA_CONNECTION_STATEEXTRA_PREVIOUS_CONNECTION_STATE 可以是:

【讨论】:

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