快速检测后台运动活动

Oka*_*neş 0 ios core-motion swift

我想在应用程序暂停(而不是停止)时检测运动活动。我使用了这段代码,如果用户使用应用程序,它就可以工作:

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")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Dun*_*n C 5

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

  1. 在前台运行
  2. 在后台运行(主动执行后台任务)
  3. 已挂起(仍在内存中,但未获得处理器时间。)
  4. 终止。暂停的应用程序可以随时终止,恕不另行通知。

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

...当您的应用程序暂停时,不会提供更新。

当用户换出应用程序或锁定手机时,应用程序仅会处于状态 2(在后台运行)几秒钟,除非您要求后台时间。除了音乐播放器和路线导航应用程序等一小部分应用程序类型外,后台时间仅限于较短的间隔(3 分钟?)。

由于这些原因,简短的答案是否定的,当您的应用程序“暂停”时,您无法接收动作更新,因为暂停变为暂停。

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