引用this one等博客帖子以及this one等问题。我将假设这是一般行为(而不是我身边的错误)。常见的答案似乎是:“更改BLE固件,以便它主动断开连接。”
没有得到很好解决的问题是Android应用程序如何处理必须非常常见的事情?由于“范围”,I.E。连接意外丢失。无线电信号强度。
有没有办法让应用程序在连接丢失时“立即”通知?
似乎不切实际的是,所有应用程序都只是坐在那里等20秒,这被称为核心操作系统超时值。这是我们应该做的事情,即使iOS上的同等应用程序知道连接丢失的时间不到1秒?
一种常见类型的BLE设备是“查找我的密钥”类型。其中许多都具有在您无意中离开“键”时提醒用户的功能。我假设这使用连接下来作为你走得太远的指示。正确?
应该会通知您的应用程序设备中的特征值发生变化。这可能是任何类型的传感器数据,例如,您正在越过某个阈值。我可以想到很多例子,你想要立刻知道你的“传感器”已经出局或范围。
我已经看到一个解决方法相当于不断监视BLE设备的RSSI,但这似乎会耗费大量电池。同样,也可以使用任何写入特性(通常成功)的失败,再次使用电池寿命付出代价。
接近这个问题的明确答案的东西似乎是一个很好的资源。
答案 0 :(得分:1)
在最新版本的Android中,他们将默认超时时间降低到5秒,这当然要好得多。
我猜大多数外设发送自己的连接更新请求,可以设置不同的超时值,解决了这个问题(连接设置和连接更新完成之间的时间很短)。
所谓的“超出范围”的探测器应用程序对我而言是相当无用的并且难以成功,因为BLE设备有时可能会暂时断开连接,即使它们在范围内。
对于你的实际问题,如果可以“立即”得到关于连接丢失的通知,基本答案是否定的,因为蓝牙控制器没有向主cpu发送任何数据包丢失的信息(这就是整个超时的目的是允许你丢包。)但是你当然可以尝试轮询rssi或设置一个流程,其中每个固定间隔的外围设备发送通知,然后你可以在你的应用程序中检测你是否在一段时间后没有收到通知。但在这种情况下,使用连接参数更新程序设置自己的超时(来自外设)会更聪明。