Быстрое обнаружение движения в фоновом режиме - PullRequest
0 голосов
/ 05 июля 2019

Я хочу обнаруживать активность движения, когда приложение находится в режиме паузы (не остановки). Я использовал этот код, и он работает, если пользователь использует приложение:

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 голосов
/ 05 июля 2019

Приложения могут находиться в нескольких состояниях:

  1. Запуск на переднем плане
  2. Запуск в фоновом режиме (активно выполняются фоновые задачи)
  3. Приостановлено (все еще в памяти)но не получаю процессорное время.)
  4. Завершено.Приостановленные приложения могут быть закрыты в любое время без предупреждения.

Только первые два состояния будут получать обновления движения.Чтобы процитировать документы:

... обновления не доставляются, пока ваше приложение приостановлено.

Приложения остаются в состоянии 2 (работает в фоновом режиме) только в течение нескольких секунд, когда пользователь меняет их или блокирует свой телефон, если только вы не запросите время в фоновом режиме.Фоновое время ограничено коротким интервалом (3 минуты?), За исключением небольшого набора типов приложений, таких как музыкальные проигрыватели и пошаговые навигационные приложения.

Из-за этих причин короткий ответ - нет,вы не можете получать обновления движений, пока ваше приложение «находится в режиме паузы», потому что приостановка приостанавливается.

Для вашего собственного использования (или, возможно, для внутреннего использования) вы можете настроить приложение в качестве музыкального проигрывателя и получать егоMotion постоянно обновляется, но такое приложение будет отклонено в обзоре магазина приложений.

...