Приложение не будет перезапущено при мониторинге значительных изменений местоположения CLLocationManager - iPhone - PullRequest
1 голос
/ 03 февраля 2012

Я работаю над приложением, которое отслеживает местоположение пользователя с интервалом времени, установленным самим пользователем (например, каждые 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, такое же поведение происходит со всеми этими устройствами.
Приборы: универсальные


UPDATE

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

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

1 Ответ

1 голос
/ 06 февраля 2012

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

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

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

...