Par*_*ots 35 core-location ios core-motion apple-m7
使用最新iOS设备中的M7芯片,当用户使用CMMotionActivityManager从静止到跑步,步行等时,可以通过编程方式获得通知.当Stava和Runkeeper 检测到用户没有通过M7移动时,它们都使用它来自动暂停GPS轮询(关闭GPS天线),然后在再次移动时重新启用GPS更新.当应用程序处于后台状态时,它可以执行此操作,这是此处的关键.
我在复制此功能时遇到的问题是,如果我在我的应用程序处于后台时关闭GPS更新,我将停止接收活动更新,并且无法再检测用户何时通过M7再次移动以重新打开GPS.
如果我让GPS一直运行,我会在整个应用程序处于后台时继续从Core Motion获取移动更新.
我假设他们没有玩白噪声或其他一些廉价的技巧来保持活跃.他们是怎么做到的?
Mik*_*ieb 16
RunKeeper确实使用音频技巧保持清醒.如果您打开应用程序包并检查其Info.plist,您将看到它注册为背景音频模式.这就是他们如何拉出距离,速度和速度的定期音频通知.这也是他们在跑步过程中保持清醒同时最大限度地减少电池消耗的方法.
如果您注意到使用RunKeeper时位置服务图标(状态栏中的三角形)完全消失,那么他们肯定没有使用任何类型的位置跟踪来完成后台执行.即使激活地理围栏和重要的位置更改监控也会导致显示"位置服务"图标.
他们也没有使用M7保持清醒,因为它不会那样工作.与M7相关的CoreMotion API的更新不会将您的应用程序从睡眠中唤醒.当他们的应用程序确实唤醒时,他们将能够查询运动活动和步骤历史记录,并可能尝试计算某些东西,但我怀疑它会是那么准确.
最后你应该注意到,在iPhone 5s和M7芯片发布之前,iOS 6中引入了自动暂停API.它们是正交概念.
我注意到,当您关闭 GPS 时,应用程序不会在 iOS 7 的后台执行任何代码,应用程序看起来处于非活动状态。因此,在转移到后台使用时效果会更好startMonitoringSignificantLocationChanges
,并且还可以从位置管理器获取更新。startUpdatingLocation
意味着在用户状态更改时和在后台同时使用服务startMonitoringSignificantLocationChanges
。
因此,当用户打开 GPS 时,您使用的startMonitoringSignificantLocationChanges
应用程序将收到
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
Run Code Online (Sandbox Code Playgroud)
最好在后台检查 CoreMotion 框架有什么问题。并尝试重新启动它。因为没有 M7 芯片设备,在这种情况下我能够读取加速度计读数。
归档时间: |
|
查看次数: |
16177 次 |
最近记录: |