快速检测背景中的运动活动

时间:2019-07-05 13:02:49

标签: ios swift core-motion

我想在应用暂停(不停止)时检测运动活动。 我使用了这段代码,并且如果用户使用应用程序,它将起作用:

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 个答案:

答案 0 :(得分:2)

应用可以处于几种状态:

  1. 在前台运行
  2. 在后台运行(主动执行后台任务)
  3. 已暂停(仍在内存中,但没有获得处理器时间。)
  4. 已终止。暂停的应用可以随时终止,而不会发出警告。

仅前两个状态将接收运动更新。引用文档:

  

...当您的应用暂停时,更新不会被交付。

除非用户要求提供背景时间,否则应用程序在用户换出或锁定手机时仅会停留在状态2(在后台运行)几秒钟。除了少数类型的应用程序(例如音乐播放器和逐行导航应用程序)外,背景时间被限制为很短的间隔(3分钟?)。

由于这些原因,简短的回答是“否”,因为暂停已暂停,所以您的应用“暂停”时您将无法接收运动更新。

您可以将自己的应用(或也许用于企业内部使用)设置为音乐播放器,并使其连续接收动作更新,但此类应用将在应用商店审查中被拒绝。