Приложение не будет перезапускать при мониторинге значительных изменений местоположения CLLocationManager - iPhone

57
2

Я работаю над приложением, которое отслеживает местоположение пользователя за определенный интервал времени, установленный самим пользователем (например, каждые 5 минут) и отправляет его на серверную страницу по ASIHTTPRequest.

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

Я использую CLLocationManager и его делегат для выполнения startMonitoringSignificantLocationChanges когда он находится на заднем плане.

В Settings значок для моего приложения в Location Services отображается с фиолетовой стрелкой, как ожидалось.

На моем info.plist меня есть Required Background Modes заданные с locations элементов по мере необходимости и методами:

locationManager:didUpdateToLocation:fromLocation:
locationManager:didFailWithError:

реализованы.

Мой метод:

(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

также реализуется и проверяет, содержит ли launchOptions UIApplicationLaunchOptions- LocationKey перед началом мониторинга значительных местоположений, когда он должен просыпаться/перезапускаться.

Есть ли способ узнать, действительно ли мое приложение перезагружается?
Есть ли какая-либо дополнительная конфигурация, которая должна быть настроена для того, чтобы это работало?

Пожалуйста, дайте мне знать, если я буду предоставлять дополнительную информацию.

Спецификации, которые я использую:
SDK Xcode 4.2.1
CLLocation находится внутри класса Singleton (читайте где-нибудь это может повлиять)
Цель развертывания iOS: 4.3
Протестировано на симуляторе Iphone 3GS, 4 и Xcode iOS 5, такое же поведение происходит со всеми этими устройствами.
Устройства: универсальные

ОБНОВИТЬ

Я вставил свой код внутри -[UIApplication beginBackgroundTaskWithExpirationHandler:] и попытался проверить ошибки с UIBackgroundTaskInvalid. Однако он даже не входит в приложение (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions метод (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions.

Я отслеживаю приложение, пытаясь сохранить и извлечь данные с помощью SQLite. При выполнении как на переднем плане, так и на заднем плане он записывает данные без проблем. Когда приложение не запущено, данные не сохраняются вообще.

спросил(а) 2012-02-03T22:02:00+04:00 8 лет, 8 месяцев назад
1
Решение
58

Как вы сейчас проверяете, возобновляется ли приложение? Вы регистрируете что-нибудь?

Приложение перезапустится в фоновом режиме, поэтому вы не увидите, что ваше приложение ожило. Через некоторое время он автоматически отключится автоматически. Вы можете выполнить некоторую работу и запросить больше фонового времени, используя -[UIApplication beginBackgroundTaskWithExpirationHandler:].

Другой ответ здесь, на SO, размещен некоторый пример кода. Из вашего описания я ничего не вижу, сравниваю ваш код с этим проектом, чтобы увидеть, не пропало ли что-то.

ответил(а) 2012-02-06T14:27:00+04:00 8 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема