简单的问题...我有一个应用程序,以 30 秒的间隔记录用户位置(使用 NSTimer),它可以完美地工作,直到应用程序变为“非活动状态”并且 NStimer 停止。因此,我正在寻找保持定位间隔(30 秒)的选项,同时仍然能够记录相当准确的位置数据(精度在 100m 以内)。
选项_001,暴力破解:使用 UIBackgroundModes = "location" 让 CLLocationManager、startUpdatingLocation 始终运行。不推荐,会耗尽电池。规律性根据要求,准确度约。 10-65m。可能是唯一现实的选择。
选项_002,SLC:我可以使用“重大位置变化”,但位置更新的频率相当差(更不用说准确性了)。如果应用程序在蜂窝塔数量有限的农村或荒野地区运行,则尤其如此。规律性未知,准确度约为。 500m
选项_003,混合:我可以在后台使用显着位置变化 (SLC) 作为“显着”移动的指示器,然后根据 kCLLocationAccuracyBest 请求 GPS 位置。这可行,但 SLC 事件不会以接近 30 秒的间隔到达(特别是在步行时)。规律性未知,准确度约为。 10-50m。
Option_004,还有别的吗?任何想法将不胜感激。
NOTE: 我以为我可以正常工作,因为当您在 iPhone(通过 USB 连接)上按 [LOCK] 时,会调用 applicationWillResignActive 但 NSTimers 不会停止。如果您在未连接的 iPhone 上尝试相同的操作(即手机正常使用时),则 NSTimers 在调用 applicationWillResignActive 后几乎立即停止。
首先,不要使用计时器来更新用户位置。从另一端接近它:
当收到新位置时,检查自上次“记录”以来的时间间隔,并决定是否要记录新位置。
此外,这将解决您的“非活动”状态问题。只需启用后台定位服务即可。 Info.plist > 所需的后台模式 > 应用程序注册位置更新
在后台时,当收到新位置时,您的应用程序将进入“后台活动”状态,以便有足够的时间进行 API 调用并推送新位置。
简而言之,您需要设计这个应用程序以使其能够与新的背景模式很好地配合。
注意:此解决方案不适用于 iOS3.x
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)