我正在做一些关于在应用程序被杀死或手机重启后唤醒应用程序的测试,同时等待发现 iBeacons。
根据苹果文档:
当应用程序在前台或后台运行时,区域监控服务会正常传递事件。(您可以将此服务用于地理和信标区域。)对于已终止的 iOS 应用程序,此服务会重新启动该应用程序以传递事件。使用此服务需要用户“始终”授权。
我用:
[CLLocationManager startMonitoringForRegion:]
搜索 iBeaconslocationManager:didEnterRegion:
和locationManager:didExitRegion:
代表- 我要求收到
CLBeaconRegion
通知notifyOnEntry
notifyOnExit
- 已为 Location 正确设置了后台执行权限
到目前为止它工作得很好,当我杀死应用程序但进入 iBeacon 区域时,应用程序正确重启。当我重新启动手机时它也可以工作,所以我的应用配置似乎没问题。
但是,如果我在重新启动后让手机关闭屏幕而不是使用它,手机对信标区域变化的反应可能非常缓慢(几个小时后)。如果我主动打开屏幕并解锁手机,手机对 iBeacons 的反应似乎会更快。
这是我在重启后立即观察到的(iOS 9.3):
- 在锁定屏幕上,蓝牙图标不见了,即使我解锁手机后蓝牙图标很好激活;值得注意的是,如果我触发了一些信标区域更改,应用程序不会在重启后立即做出反应
- 解锁一次手机后,有时我在没有解锁手机的情况下打开屏幕,似乎虽然没有出现蓝牙图标,但任何信标区域更改都不会触发任何事情
- 在某个时间点,锁定屏幕上开始出现蓝牙图标;手机似乎对信标区域的变化有反应
是否对重启时管理蓝牙的方式有一些解释?可以预测吗?
我需要能够解释为什么 iBeacon 上的区域监控在手机重启后反应不那么灵敏。我想知道手机是否等待一种“重大位置更改”事件才能正确打开其蓝牙设备。