繁体   English   中英

BLE在后台

[英]BLE in the background

我正在使用iBeacon进行项目,该项目要求应用程序在后台持续运行。 请不要介意这一点的实用性。 iBeacon API不允许应用程序在后台不断变化或接收进入/退出事件以外的任何其他通信(在您设置了needsDisplay标志的情况下可以接受,但这并不像我所需要的那样被动。 )。 一旦进入特定区域,当应用程序完全处于后台时,您似乎无法检测到您最靠近哪个信标。

为了使它生效,我将几个iOS设备设置为CoreBluetooth外设,并始终插入该应用程序可以不断“发现”的状态。 由于用于外围设备的BLE配置文件是“可连接的”,因此该应用程序可以无限期地处于后台,并且iBeacon可以在一整天内进行范围调整。 开机时,我看到电池寿命的减少非常少。

现在的问题是,每隔两天左右,该应用程序就会退出,并且不会被进入/退出事件唤醒,也不会在范围内被其他BLE设备唤醒。

我了解到,采用这种骇人听闻的解决方案必然会遇到许多问题,但是对于我的一生,我无法缩小可能导致此问题的范围。 思考?

每隔一段时间,CoreLocation将被挂断,并且不会报告任何新的进入/退出事件。 重新启动手机通常可以解决此问题。 轶事报告的增多表明,自iOS 7.1发行以来,这种情况可能更常见(过去几周在StackOverflow上我还看到了另外两个类似的问题,Radius Networks对此问题也提出了很多支持要求),但是没有确凿的证据证明7.1的变化会影响到这一点。

编辑:从其他地方收集的其他数据表明,当这些挂断发生时,蓝牙继续正常运行,并且挂断的设备仍然有可能作为iBeacon进行传输。 这表明CoreLocation中存在一个错误,该错误导致定期的Bluetooth LE扫描寻找iBeacons停止。 到目前为止,唯一已知的解决方法是重新启动受影响的电话。

这个问题非常罕见,以至于我无法描述它的根本原因。 是蓝牙问题吗? 一个CoreLocation问题? 您的设置可能是找到问题的理想方法。

重现此问题后,我将执行以下操作:

  1. 启动另一个iBeacon扫描程序,例如“ 为iBeacon定位” ,并使其在该区域内的所有iBeacon范围内(确保已配置您的Proximity UUID。)您看到它们了吗? 如果是这样,则Bluetooth和CoreLocation可以正常工作,因此问题可能出在您的应用程序上。

  2. 如果在(1)中没有看到任何iBeacon,请转到“设置”>“蓝牙”,然后扫描附近的其他设备(甚至是经典的蓝牙设备)。 使Macbook或蓝牙耳机可见,以便于测试。 如果您没有看到任何设备,则说明蓝牙已挂起。 尝试将其关闭然后再打开。

  3. 如果在(2)中看到了蓝牙设备,但在(1)中没有看到iBeacon,则可能是操作系统在处理CoreLocation时出现问题。

我想知道您所看到的。 上面的过程无法解决您的问题,但是它可能会提供一些更多证据表明正在发生的事情将使修复成为可能。

这是用户报告类似问题的其他问题:

带有iBeacon的iOS应用必须重新启动设备

ibeacon不在iPhone 4S中出现

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM