Swift 在后台检测运动 activity

Swift detect motion activity in background

我想在应用暂停(而不是停止)时检测运动 activity。 我使用了这段代码,如果用户使用 app:

它就可以工作
let isActivityAvailable = CMMotionActivityManager.isActivityAvailable()
if isActivityAvailable {
    CMMotionActivityManager().startActivityUpdates(to: OperationQueue.main) { (motionActivity) in
        if (motionActivity!.confidence.rawValue > 0) {
            if (motionActivity?.walking)! {
                print("User is walking")
            }
        }
    }
}

应用程序可以处于多种状态:

  1. 运行 在前台
  2. 运行 在后台(主动执行后台任务)
  3. 已挂起(仍在内存中但未获得处理器时间。)
  4. 终止。暂停的应用程序可以在没有警告的情况下随时终止。

只有前 2 个州会收到动态更新。引用文档:

...updates are not delivered while your app is suspended.

当用户将应用换出或锁定其 phone 时,应用仅在状态 2(运行 在后台)停留几秒钟,除非您要求后台时间。除了音乐播放器和 turn-by-turn 导航应用等一小部分应用类型外,后台时间被限制为很短的间隔(3 分钟?)。

由于这些原因,简短的回答是否定的,当您的应用 "is pause" 因为暂停变为暂停时,您无法接收动态更新。

为了您自己的使用(或者可能是企业内部使用),您可以将应用设置为音乐播放器并让它持续接收动态更新,但这样的应用会在应用商店审核中被拒绝。