iOS 7.1 地理围栏和 iBeacons 停止工作
Posted
技术标签:
【中文标题】iOS 7.1 地理围栏和 iBeacons 停止工作【英文标题】:iOS 7.1 Geofencing and iBeacons stop working 【发布时间】:2014-04-10 03:57:46 【问题描述】:我正在开发一个定位服务应用程序,并且发现了一些奇怪的行为。一旦用户确认使用定位服务,地理围栏图标就会出现在状态栏中。一切正常,无论应用程序正在运行、在后台运行还是不在后台运行,我都会收到进入和退出区域事件。但是在某些时候,地理围栏图标消失了,我的设备对信标不敏感。在我重新启动设备之前,是否存在禁用地理围栏的任何情况?电源循环确实可以恢复。
【问题讨论】:
我也有同样的经历。不幸的是,简单地重新启动应用程序并不能解决问题。我“只是”不得不禁用并重新启用蓝牙,所以 iBeacons 像以前一样工作。然后我不得不重新启动应用程序。到目前为止,这确实只发生在 ios7.1 上,在 iOS7.0 上找不到这种行为 【参考方案1】:这是 CoreLocation 中新引入的错误。不幸的是,没有已知的自动化方法来解决这个问题。它需要重启电源或蓝牙关闭/开启序列才能解决。
见here。
【讨论】:
【参考方案2】:我遇到了类似的问题。我的应用程序将在初始运行时工作并定位信标。当我重新启动时,应用程序按预期打开到 ScanViewController 但未检测到信标。
我参考了 *** 上的文章 iBeacon: didRangeBeacons stops getting called, must reset device for it to work again 并查看了 Apple 的 WWDC 2013 视频会议“Corelocation 的新功能”https://developer.apple.com/videos/wwdc/2013/index.php?id=307
我发现了额外的 CLLocation 委托方法:
当你设置你的信标区域时:
notifyEntryStateOnDisplay = YES;
//The following delegate method will be called:
-(void) locationManager: (CLLocationManager *) manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
if (state ==CLRegionStateInside)
[_locationManager startRangingBeaconsInRegion:region]:
//Your alternative code
//To help trouble shoot, I added this delegate methods
-(void) locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *) region withError: (NSError *)error
and
-(void) locationManager:(CLLocationManager *)manager rangingBeaconsDidFailForRegion:(CLRegion *) region withError: (NSError *)error
我运行了应用程序。它没有返回失败错误。我检查了设置。蓝牙已启用并正在检测 BT 设备。
我检查了地理围栏图标的状态栏。存在地理围栏图标。
我等了超过 2 分钟,然后应用检测到信标并按预期工作。呆滞是轻描淡写。我知道重启应该根据我在 *** 和其他资源中阅读的所有 iOS 7.1 文章进行。
我重新启动并等待应用程序检测到信标。平均需要 2 分钟才能检测到信标。我不确定是什么导致了这种缓慢的响应。由于必须在几分之一秒内测量应用程序的响应,我相信开发人员可能会认为他们的应用程序无法正常工作。
如果您的应用未检测到信标或返回失败错误,我建议您等待 2 分钟,看看您的应用是否会检测到信标。我希望这会有所帮助。
【讨论】:
以上是关于iOS 7.1 地理围栏和 iBeacons 停止工作的主要内容,如果未能解决你的问题,请参考以下文章
关闭应用程序时的 iOS 7.1 CoreLocation 和地理围栏