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