借助最新 iOS 设备中的 M7 芯片,当用户使用 CMMotionActivityManager 从静止状态变为跑步、行走等时,可以通过编程方式获得通知。 Stava 和 Runkeeper 都用过这个自动暂停 GPS 轮询 http://gigaom.com/2013/09/24/strava-run-app-races-to-use-apples-m7-in-the-iphone-5s-to-save-battery-life/(关闭 GPS 天线)当它检测到用户没有通过 M7 移动时,然后在用户再次移动时重新启用 GPS 更新。它能够在应用程序处于后台状态时执行此操作,这是这里的关键。
我在复制此功能时遇到的问题是,如果我在应用程序处于后台时关闭 GPS 更新,我将停止接收活动更新,并且无法再检测用户何时通过 M7 再次移动以重新打开 GPS。
如果我让 GPS 一直运行,我将在应用程序处于后台的整个过程中继续从 Core Motion 获取运动更新。
我假设他们没有玩白噪音或其他一些廉价的技巧来保持活跃。他们是怎么做的?
RunKeeper 实际上确实使用音频技巧来保持清醒。如果您打开应用程序包并检查其 Info.plist,您将看到它注册了背景音频模式。这就是他们如何定期发出有关您的距离、速度和配速的音频通知的方式。这也是它们在跑步过程中保持清醒同时最大限度减少电池消耗的方式。
如果您注意到在使用 RunKeeper 时位置服务图标(状态栏中的三角形)完全消失,那么它们肯定没有使用任何类型的位置跟踪来完成后台执行。即使激活地理围栏和重大位置变化监控也会导致定位服务图标出现。
他们也不会使用 M7 来保持清醒,因为它不起作用。 M7 相关 CoreMotion API 的更新不会将您的应用程序从睡眠状态唤醒。当他们的应用程序醒来时,他们将能够查询运动活动和步数历史记录,并可能尝试计算一些东西,但我怀疑它是否会那么准确。
最后您应该注意,自动暂停 API 是在 iPhone 5s 和 M7 芯片发布之前在 iOS 6 中引入的。它们是正交的概念。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)