gpt4 book ai didi

Android 立即检测到蓝牙断开连接最多 2 秒

转载 作者:可可西里 更新时间:2023-11-01 18:47:38 25 4
gpt4 key购买 nike

我正在寻找一种方法来检测蓝牙设备断开连接发生后立即(最多 2 秒),通常是在“设备太远”的情况下或设备电池没电的情况下。目前,我可以通过获取 BluetoothDevice.ACTION_ACL_DISCONNECTED 来使用 BroadcastReceiver 检测到它,但它需要大约 16 到 20 秒才能触发。

  1. 有什么方法可以在最多 2 秒内得到通知。
  2. 我使用了 BroadcatReceiver,但它的速度不够快,无法在最多 2 秒内发出警报,因此是否有任何其他类型的方法可用于快速收到蓝牙已断开连接的通知。
  3. 我使用这个 createRfcommSocketToServiceRecord(UUID);连接配对设备,我必须使用 UUID 使用它。

我已经访问了很多关于这个问题的链接,但没有一个符合我的需求。这就是为什么任何帮助将不胜感激。

谢谢。

最佳答案

我认为您可以快速(在两秒内)可靠地感知连接丢失的唯一方法是通过您自己在蓝牙连接上使用的应用程序协议(protocol)。例如,您的应用程序协议(protocol)可能实现每 500 毫秒发生一次心跳。如果您在两秒内没有看到心跳,那么您可以触发自己的事件。

蓝牙是一种基于套接字的流协议(protocol),旨在通过不可靠的介质(即 radio )工作,因此必须容忍数据包中的错误(或丢失)。因此,正如您所发现的,在您的蓝牙堆栈声明它已放弃并断开设备连接之前,将花费 2 秒以上的时间。

我在 Play 上有一个应用程序,旨在通过蓝牙与汽车 ECU 通信,我的断开连接策略与我在第一段中建议的完全一样。

14 年 6 月 20 日更新

我在您的赏金评论和下面的评论中看到您要求提供一个代码示例,但如果我对您在套接字连接上运行的应用程序协议(protocol)一无所知,我很难提供一个代码示例.或者换句话说,我的第一段(即心跳建议)到底有什么你不理解或不能自己编写代码的地方?使用心跳的概念真的很简单。您将在代表心跳消息的应用程序协议(protocol)中定义某种消息类型。连接的一端定期发送此心跳消息,比如每一秒。连接的另一端检查是否每隔一秒左右收到一次心跳消息,并在两秒超时后断开连接。不可能比这更具体,因为我看不到您现有的代码,也不知道您当前正在通过套接字交换哪种消息。

关于Android 立即检测到蓝牙断开连接最多 2 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22200364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com