2013-10-07 2 views
21

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

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

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

App Store Review Guidelines: «Приложения для многозадачности могут использовать только фоновые службы для их предполагаемых цели: VoIP, воспроизведение звука, местоположение, завершение задачи, локальные уведомления и т. д. » Я не хочу постоянно обновлять местоположение (GPS) (чтобы сэкономить аккумулятор). Если я буду постоянно обновлять местоположение, но отключить GPS, приложение будет приостановлено.

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

Спасибо заранее!

+0

@Jackson. Вы нашли какое-либо решение или альтернативы? –

+0

@AshokKumarS Не совсем, но я думаю, что ответ ниже объясняет это. Вам нужно сделать приложение бегите в фоновом режиме, используя другие средства, а затем просто используйте Core Motion, как обычно. – Jackson

ответ

2

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

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

+0

Чтобы уточнить, вы имеете в виду включить startActivityUpdatesToQueue прямо из didFinishLaunchingWithOptions, например, и когда приложение вводит фон, тогда вызывается startUpdatingLocation, и каким-то образом обновление местоположения в фоновом режиме вызывает ActivityUpdate? Или вы говорите put startActivityUpdatesToQueue в locationManager: didUpdateLocations:?Tx – Spectravideo328

+0

@ Spectravideo328 Я просто говорю, что ваше приложение не работает в фоновом режиме, если оно не работает в фоновом режиме (и просто использование Core Motion - это не способ сделать это). – matt

+0

ОК спасибо. Поэтому недостаточно перечислять обновления местоположения в фоновом режиме .plist, приложение должно фактически обновлять местоположение в фоновом режиме (и возвращать locationManager: didUpdateLocations). А поскольку приложение работает в фоновом режиме, то coremotion будет промаркироваться? Верный? – Spectravideo328

Смежные вопросы