当前位置: 首页 > 知识库问答 >
问题:

CoreMotion在后台状态更新

于嘉誉
2023-03-14

使用最新iOS设备中的M7芯片,当用户使用CMMotionActivityManager从静止状态转到跑步、行走等状态时,可以通过编程方式获得通知。Stava和Runkeeper都使用此功能在检测到用户未通过M7移动时自动暂停GPS轮询(关闭GPS天线),然后在再次移动时重新启用GPS更新。它可以在应用程序处于后台状态时执行此操作,这是此处的关键。

复制此功能时遇到的问题是,如果我在应用程序处于后台时关闭GPS更新,我将停止接收活动更新,并且无法再检测用户何时通过M7再次移动以重新打开GPS。

如果我让GPS一直运行,我将在应用程序处于后台的整个时间继续从Core Motion获取运动更新。

我假设他们不是在玩白噪音或其他廉价的把戏来保持活跃。他们是怎么做到的?

共有3个答案

董和泽
2023-03-14

你有没有考虑过尝试一下

application:performFetchWithCompletionHandler: 

在应用委托中?你不能控制它被调用的频率,但是根据应用程序,它可以每隔15分钟被调用一次。然后,您可以从那里启动CMMotionActivityManager来查询M7结果。

现在还不完全清楚你想要复制什么功能,但是M7芯片记录了所有的活动,不管你的应用程序是否在运行。因此,您只需在后台查询并更新步骤总计或活动类型总计。

祁修平
2023-03-14

我注意到,当你关闭GPS,应用程序不会执行任何代码在后台iOS7,应用程序看起来像在非活动状态。因此,在移动到后台时,更好地使用开始监控重大位置变化,并从位置管理器获取更新。意味着在用户状态更改和后台中同时使用servicestarUpdatingLocationChange

因此,当用户打开GPS时,当你使用start Monteoring显著位置变化时,你的应用程序将收到

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

最好在后台检查一下CoreMotion框架有什么问题。并尝试重新启动它。因为没有M7芯片设备,我可以在这种情况下读取加速计读数。

夏元明
2023-03-14

RunKeeper实际上使用音频技巧来保持清醒。如果您打开应用程序包并检查其Info.plist您将看到它注册为背景音频模式。这就是他们如何获得你的距离、速度和速度的周期性音频通知。这也是他们如何在你跑步时保持清醒,同时最大限度地减少电池耗尽。

如果您注意到位置服务图标(状态栏中的三角形)在使用RunKeeper时完全消失,那么他们肯定没有使用任何类型的位置跟踪来完成后台执行。即使激活地理Geofence和重要的位置更改监控也会导致位置服务图标出现。

他们也没有使用M7来保持清醒,因为它不能以这种方式工作。M7相关CoreMotion API的更新不会将您的应用程序从睡眠中唤醒。当他们醒来时,他们将能够查询运动活动和步态历史,并可能尝试计算一些东西,但我怀疑它是否准确。

最后,您应该注意到,在iphone5s和M7芯片发布之前,ios6中引入了自动暂停api。它们是正交概念。

 类似资料:
  • 我引用了前台和后台接收firebase通知的答案-->https://stackoverflow.com/A/38451582/12553303 其实下面是我的疑问:-------- 如果我没有为前台条件编码(谈论推送通知),当我的应用程序在后台时,我仍然会得到通知,对吗????-->是的 但是,当im处于前台状态时,我从firebase推送了一个通知-->我不会在状态栏上看到通知,这也是可以的(

  • 这个问题在这里已经得到了回答,但事情总是在变化。 基本上,父组件获取一些数据,子组件需要这些数据。 这是子组件。

  • 说明 支付宝境外到店支付-更新商户二维码状态 官方文档:https://global.alipay.com/service/merchant_QR_Code/34 类 请求参数类 请求参数 类名:\Yurun\PaySDK\AlipayCrossBorder\InStore\ModifyStatus\Request 属性 名称 类型 说明 $service string 接口名称 $timesta

  • 问题内容: 我正在尝试制作一个不错的ApiWrapper组件,以填充各种子组件中的数据。从我阅读的所有内容来看,这应该可以正常工作:https : //jsfiddle.net/vinniejames/m1mesp6z/1/ 但是由于某种原因,当父状态更改时,子组件似乎没有更新。 我在这里想念什么吗? 问题答案: 您的代码有两个问题。 您的子组件的初始状态是通过props设置的。 引用此SO答案:

  • 我有一个带有两组按钮(功能和目标)的界面。当我点击一个按钮时,我希望它从一个团队转到另一个团队。我正在用react和redux实现这一点。我唯一的问题是,当状态更新并且我成功地记录了更新的状态时,除非我使用forceUpdate(),否则组件不会更新。我不明白的是,既然状态更新成功,组件不应该自动重新渲染吗? 一些js 正如您所看到的,当我单击一个按钮时,我触发updateLists函数,该函数将

  • 所以我尝试使用react、redux应用一个简单的登录功能。通过使用axios post请求发送到django服务器(用户名、密码),但问题出在调用它的组件上。例如组件A。所以场景是这样的: 用户输入用户名和密码,然后单击提交 > 导出默认连接(mapStateToProps, mapDispatchToProps)(LoginView); } > 我的初始状态 const initialStat