Серая стрелка GPS отображается в строке состояния, хотя приложение, основанное на местоположении, убито с помощью Fast App Switcher - PullRequest
3 голосов
/ 31 января 2012

Я пишу приложение на основе местоположения для 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 ]

3 голосов
/ 10 июня 2012

попытайтесь восстановить «предупреждения о местоположении» в «настройках-> общие-> сброс-> сбросить предупреждения о местонахождении».Это работало для меня, используя "startupdatinglocation".

3 голосов
/ 31 января 2012
  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");
}


_ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _

...