Серая стрелка GPS отображается в строке состояния, хотя приложение, основанное на местоположении, убито с помощью Fast App Switcher
Я пишу приложение на основе местоположения для iOS 5. Приложение использует CLLocationManager
получать обновления местоположения.
Когда приложение запускается, я создаю LocationManager, вызывая [self.locationManager startUpdatingLocation];
и серая стрелка местоположения появляется в строке состояния.
Когда приложение переходит в фоновый режим, я звоню
[self.locationManager stopUpdatingLocation];
[self.locationManager startMonitoringSignificantLocationChanges];
потому что я просто хочу получать значительные изменения местоположения, пока приложение находится в фоновом режиме. Серая стрелка местоположения по-прежнему отображается.
У меня также есть кнопка выхода в моем приложении, где я звоню
[self.locationManager stopUpdatingLocation];
exit(0);
Когда пользователь нажимает кнопку "Выход", приложение завершает работу, и серая кнопка местоположения исчезает из строки состояния. Все хорошо до сих пор.
Проблема возникает, когда пользователи заканчивают приложение с помощью Fast App Switcher, потому что после этого серая стрелка местоположения все еще отображается в строке состояния, хотя приложение не работает. Серая стрелка местоположения сначала исчезает, когда пользователь удаляет приложение со своего iPhone.
Итак, вопросы:
Когда пользователи завершают приложение, используя Fast App Switcher, и в строке состояния по-прежнему отображается серая стрелка, означает ли это, что обновления местоположения все еще выполняются, или это означает, что приложение использовало службы определения местоположения в течение последних 24 часов? Я думаю, что ответ - первый, обновления местоположения все еще выполняются!
Приложение должно выполняться в фоновом режиме, поэтому я не могу остановить LocationManager, когда приложение входит в фоновый режим.
applicationWillTerminate:
никогда не вызывается, когда пользователь убивает приложение с помощью Fast App Switcher. Есть ли способ получить событие, когда приложение завершается с помощью Fast App Switcher или завершается ОС?Я видел некоторые другие приложения, где серая стрелка в строке состояния исчезает, когда приложение удаляется с помощью Fast App Switcher. Как эти приложения достигают этого???
2 ответа
- Значительные обновления местоположения доступны, если ваше приложение не на переднем плане.
- Я просто даю вам идею, что я сделал что-то подобное, но я не знаю, что происходит в вашем случае.
Просто зарегистрируйте свое приложение для фоновой задачи и сделайте что-то для целей тестирования, в этом случае, если вы убьете свое приложение с помощью быстрого переключения приложений, тогда метод делегатаapplicationWillTerminate:
всегда называется.
___________Отредактировано______________
просто добавьте эту переменную в ваш AppDelegate.h
UIBackgroundTaskIdentifier bgTask;
и сделайте ваш метод делегата таким, как этот, и теперь убейте ваше приложение.
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UIApplication *app = [UIApplication sharedApplication];
if ([app respondsToSelector:@selector(beginBackgroundTaskWithExpirationHandler:)]) {
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
// Synchronize the cleanup call on the main thread in case
// the task actually finishes at around the same time.
dispatch_async(dispatch_get_main_queue(), ^{
if (bgTask != UIBackgroundTaskInvalid)
{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
});
}];
}
}
- (void)applicationWillTerminate:(UIApplication *)application
{
NSLog(@"is terminated");
}
_____________________________
Попытайтесь восстановить "предупреждения о местонахождении" в "настройки-> общие-> сброс-> сбросить предупреждения о местонахождении". Это работало для меня, используя "startupdatinglocation".