我可以在后台收听 CMPedometer 并在不同情况下发送本地推送通知吗?

Posted

技术标签:

【中文标题】我可以在后台收听 CMPedometer 并在不同情况下发送本地推送通知吗?【英文标题】:Can I listen to CMPedometer in the background and send a local push notification upon different conditions? 【发布时间】:2015-01-21 16:21:59 【问题描述】:

这是一个 ios 问题。

我想做的是在应用处于后台时收听内置计步器 (CMPedometer)。当计步器活动发生变化时(从“步行”到“跑步”再到“不动”等),我希望可以选择向用户的设备发送本地推送通知。

例如,应用程序位于后台。当我开始搬家时,我会收到一条推送通知,上面写着“你要搬家了!”当我停止移动时,我会收到一条推送通知,上面写着“你已经停止移动了!”

目前,我已经为我的后台模式设置了“位置更新”。该应用程序将在后台运行大约 15 分钟并跟踪位置并执行我想要的操作(当计步器数据更改时触发推送通知)。但 15 分钟后,它完全停止了。

我所描述的内容在设备上是否可行?如果是这样,应用程序在 15 分钟后超时,我做错了什么?

很高兴提供更多细节,但我不想让这个已经很长的问题过多!

【问题讨论】:

【参考方案1】:

当您的应用暂停时,无法获取实时活动更新。

如果您想跟踪用户的活动,例如步行、跑步等,请使用CMMotionActivityManager

运动数据反映用户在一段时间内是在步行、跑步、在车内还是静止不动。

根据Documentation:

应用程序暂停时不会传递更新,应用程序可以使用queryActivityStartingFromDate:toDate:toQueue:withHandler: 获取应用程序暂停时的活动。

因此,在后台跟踪用户活动的最佳方法是使用后台抓取,并将抓取间隔设置为最小。

UIApplication.sharedApplication().setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)

【讨论】:

setMinimumBackgroundFetchInterval 和 UIApplication 是 iOS API。当应用程序在远离手机的手表上运行时,例如跑步或远足时,它们是不实用的。您如何仅使用 watchOS 进行后台获取,而不依赖手机?

以上是关于我可以在后台收听 CMPedometer 并在不同情况下发送本地推送通知吗?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在单火花上下文中收听两个 dtsreams?

收听后台服务中的音量按钮?

提取 MPMoviePlayerViewController 音频以继续在后台收听

如何跟踪用户收听特定播客的时间

CMPedometer 保存步骤时间戳

如何使用提供程序包收听更改并在颤振中重建小部件?