Я тщательно изучил эту тему, прежде чем задавать вопрос, но должен убедиться, что я пришел к правильным выводам, и если это так, я хотел бы помочь в максимально возможной реализации этого.
Для моего приложения важно получать обновления акселерометра каждые 5 секунд или, возможно, быстрее в определенных ситуациях; без этой функции, это не очень полезное приложение.
Итак, как добиться этого? Основная стратегия заключается в использовании метода:
[cmMotionManager startDeviceMotionUpdatesToQueue:...]
с соответствующим deviceMotionUpdateInterval
, а затем как-то "убедитесь, что ваше приложение никогда не приостанавливается, т.е. вам необходимо реализовать один из фоновых режимов (например, местоположение, фоновое аудио, VOIP и т.д.)
Эта стратегия используется многими приложениями уже в магазине приложений, такими как Sleep Cycle ( "звукозапись" ), Nike + и Pacer (воспроизведение звука).
(Исправьте меня, если есть другой способ непрерывно получать информацию о акселерометре)
Моя проблема в том, что мое приложение не будет записывать звук, не нуждается в VOIP и т.д. и не требует какого-либо нового API fetch/remote уведомлений в iOS 7. Итак, как сделать, чтобы убедиться, что я остаюсь активен в фоновом режиме?
Ну, так как я разрабатываю приложение, которое измеряет движение, его не так много, чтобы получить информацию о местоположении. Мой вопрос заключается в том, как сделать обновление местоположения наиболее эффективным способом, учитывая тот факт, что мне действительно не нужны эти обновления местоположения на всех, гарантируя, что мое приложение никогда не будет приостановлено?
Это то, что у меня есть в настоящее время в моем делете приложения:
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
- (void)applicationWillResignActive:(UIApplication *)application
{
[self.locationManager startUpdatingLocation];
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[self.locationManager stopUpdatingLocation];
}
Я заметил, что иногда на некоторое время после того, как я нажимаю кнопку "домой" в своем приложении, мое приложение приостанавливается - предположительно, поскольку Core Location пытается получить исправление местоположения для доставки в приложение.
Я также хотел бы знать, как только вы узнаете о местоположении, сколько времени у вас есть, прежде чем система снова приостановит вас, если новое обновление местоположения не поступит? Должен ли я попытаться получать непрерывные обновления местоположения (стиль навигации), чтобы я никогда не был приостановлен?
Пожалуйста, помогите!
Спасибо