Подтвердить что ты не робот

CMMotionActivityManager - получение обновлений активности движения, когда приложение приостановлено или в фоновом режиме

Я тестировал новые API Motion Activity Manager (CMMotionActivityManager). Я хочу создать приложение, которое может получать и обрабатывать обновления движения из startActivityUpdatesToQueue пока приложение не работает на переднем плане. Я правильно получаю обновления движения (стационарные, ходьба, бег, автомобильный, неизвестный), пока приложение находится на переднем плане, но как только оно уходит в фоновый режим (и, следовательно, приостанавливается), приложения перестают получать обновления движения.

Описание класса CMMotionActivityManager: "Этот метод инициирует асинхронное отслеживание данных движения. При вызове этого метода диспетчер активности движения выполняет блок обработчика в указанной очереди, сообщая о текущем действии движения для устройства. После этого диспетчер активности движения выполняет блок обработчика только при изменении данных движения. Блок обработчика выполняется максимально эффективно, и обновления не доставляются, пока ваше приложение приостановлено. Если обновления поступили, когда ваше приложение было приостановлено, последнее обновление доставляется в ваше приложение, когда он возобновляет выполнение. Чтобы получить все обновления, которые произошли, когда ваше приложение было приостановлено, используйте queryActivityStartingFromDate:toDate:toQueue:withHandler: method. "

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

Рекомендации по обзору App Store:

" 2.5.4 Многозадачные приложения могут использовать фоновые сервисы только по назначению: VoIP, воспроизведение аудио, местоположение, завершение задачи, локальные уведомления и т.д."

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

Пожалуйста, дайте мне знать, как сохранить мое приложение в фоновом режиме и получать обновления активности движения. Должен быть способ сделать это: я попробовал приложение Strava.... даже когда приложение находится в фоновом режиме, оно отключает GPS, когда пользователь приостанавливает работу. Когда пользователь возобновляет работу, он автоматически включает GPS (все это, когда приложение находится в фоновом режиме)... это, вероятно, означает, что приложение работает в фоновом режиме и активно получает обновления активности движения, даже когда GPS выключен.

4b9b3361

Ответ 1

Это не новая проблема. Никогда не использовалось фоновое использование основного движения. Вам разрешено использовать Core Motion, если ваше приложение работает в фоновом режиме, но чтобы запустить его в фоновом режиме, вы должны делать что-то другое (например, получать обновления местоположения при отправке приложения в фоновом режиме, а вы иметь фоновый сервис location, указанный в вашем Info.plist.

Обратите внимание, что в iOS 7, если у вас есть подходящее оборудование, вы можете использовать отложенные обновления местоположения, чтобы периодически разбудить ваше приложение в фоновом режиме. Таким образом, вы экономите электроэнергию, но ваше приложение будет работать в фоновом режиме, а затем без листка справочной службы Info.plist.