Серая стрелка 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 ответа

Решение
  1. Значительные обновления местоположения доступны, если ваше приложение не на переднем плане.
  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".

Другие вопросы по тегам