我想分享我执行的测试场景的信息,并请您分享您在区域监控方面的经验。因此,我注册了两个相对的区域(A 和 B),半径为 5 公里,所需精度为 1 公里,它们之间的距离为 20 公里。但是,从 A 到 B 时,我没有收到任何 didEnterRegion/didExitRegion 事件。在我的应用程序原型中,我还放置了两个按钮(用于测试目的):一个启动重大更改,另一个启动标准位置监控。两者都在屏幕日志上打印 didUpdateToLocation 事件。
因此,在到达 B 区中心并对不可预测的功能感到非常恼火之后,我启用了重要的监控。之后,我收到了几个 didUpdateToLocation,horizontalAccuracy 约为 8.5 公里!哇,这很痛苦,因为我想做的就是拥有一个功能,可以通知用户,他想要的位置是距离他当前位置位置半径 5 公里的某个地方,并且我想依赖 GSM 小区三角形位置仅检测方法(用于保护电池)。
那么,回到我的例子。在出现如此大的 8 公里误差后,我启用了具有最佳精度的标准监控(GPS)。宾果,我收到了水平精度为 399 m 的 didUpdateToLocation 事件,直到那时,我才从我的初始位置(区域 A)收到了 didExitRegion 事件,以及另一个带有 didEnterRegion (B)的事件。 didUpdateToLocation 的另一个更新更准确一些 - 50m。
在之前的场景中,我的准确性也不稳定。有时有4公里水平精度,有时更少。但主要问题是,如果我们想节省电池(苹果在文档中教我们这一点),那么我们可以只依靠区域监控+ GSM 而不使用 GPS 吗?有一个苹果代码示例,其中包含“正确使用区域监控”(here),但也有一些令人无法接受的地方:
1)他们指出示例代码仅适用于 iPhone 4,Apple 文档指出 iOS 4.0+ 支持区域监控和重要监控。很酷,哈?
2) 示例代码使用了全部 3 种定位方法:significant、standard、region。它始终使用区域监控,但此外还使用最准确的标准位置。当应用程序进入后台时,它会停止标准并开始重大变化监控。当进入前台时,应用程序会停止并开始标准位置。似乎苹果文档相当模糊,不清楚如果我们只使用区域监控,我们会得到什么惩罚(horizontalAccuracy),或者我们是否总是使用所有三种方法?
3) Apple 文档指出,我们需要保留电池并根据需要使用最低限度的定位服务,如果我们不需要 GPS,那么我们应该使用 GSM(例如,1 - 3 公里所需的精度)。但示例代码使用最佳所需精度 (GPS) 进行区域监控和标准监控(当应用程序位于前台时)。我确实知道 GPS 可以解决我所有的错误和准确性问题,但仅使用 GSM 怎么样?在我的场景中获得 8.5 公里水平精度后,我不确定是否可以使用区域监控,因为它无法提供至少 5 公里的可接受误差。
根据我的经验,区域监控非常准确,不会对电池寿命造成重大损失。我有一个只有30-50米宽的区域的使用场景。准确性完全没有问题。我要说的一件事是,我只针对 iPhone 4 及更高版本的设备。如果我想支持 3GS 型号,我需要实施您提到的一些更改。
当纯粹依赖 -startMonitoringForRegion 时,您的更新会自动触发 -didEnter 和 -didExit 事件。这些是通过位置跟踪事件的组合触发的。重大变化、手机信号塔传输、WiFi 连接、另一个应用程序请求位置等等。当这些其他共享位置事件触发回调时,操作系统会进行处理。根据我的经验,它非常准确。但这仅适用于 iPhone 4 及更高版本。
我还使用了 Apple 的示例应用程序来进行设置,但文档中没有提供有关何时/何处获取触发器的详细信息。您可以阅读 Apple 提供的内容位置意识指南。希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)