Как заставить приложение GPS работать в фоновом режиме без пауз

У меня проблема с работой GPS в фоновом режиме.

Мне удалось сохранить работу GPS, когда приложение находится в фоновом режиме, но иногда оно останавливается. Я заметил, что он останавливается, когда я вхожу в здание, и я остаюсь там на 2-3 часа. «Остановки» означает, что я не получаю ни одной точки GPS, хотя значок службы определения местоположения все еще горит. Затем, когда я выхожу, я не получаю никаких очков, пока не выведу свое приложение на передний план.

Я установил для свойства pausesLocationUpdatesAutomatically значение NO.

Итак, все работает нормально, пока я не попаду в место со слабым сигналом GPS. Когда я выхожу из этой области, я больше не получаю очки, хотя должен, потому что сигнал GPS теперь хороший.

И вот мой код, когда приложения входят в фоновый режим:

- (void)applicationWillResignActive:(UIApplication *)application
{
    NSLog(@"[AppDelegate]: Application entering in background!");
    if(doesUserWantGPSTracking)
    {
    [self stopGPS];

    UIApplication *app = [UIApplication sharedApplication];

    bgTask = [app beginBackgroundTaskWithExpirationHandler:
              ^{

                    dispatch_async(dispatch_get_main_queue(),
                    ^{

                        if( bgTask != UIBackgroundTaskInvalid )
                        {
                            [app endBackgroundTask:bgTask];
                            bgTask = UIBackgroundTaskInvalid;
                        }

                    });

              }];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
        ^{

            [self startGPS];

            dispatch_async(dispatch_get_main_queue(), ^{

                if( bgTask != UIBackgroundTaskInvalid )
                {
                    [app endBackgroundTask:bgTask];
                    bgTask = UIBackgroundTaskInvalid;
                }

            });

        });
    }
    }

person Vlad Bogdan    schedule 20.03.2013    source источник


Ответы (3)


В свой информационный список добавьте Required background modes

и установите один элемент на App registers for location updates

Обновлено:

Поскольку ios возвращаются к - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation при значительном изменении расстояния. Я думаю, вам нужно изменить:

// Set the movement threshold.
locationManager.distanceFilter = 500; // meters
person Horst    schedule 20.03.2013
comment
Это не это. Я уже сделал это. Забыл упомянуть, извините. - person Vlad Bogdan; 20.03.2013
comment
Обновил мой ответ, но я не уверен, что это ваш случай. - person Horst; 10.12.2013

внутри здания вы часто не получите никакого GPS-местоположения. GPS нужен свободный обзор неба. Если вы не получаете позицию, конечно, единственная причина, по которой ваше приложение работает в фоновом режиме, отсутствует, поэтому ios переводит ваше приложение в неактивное состояние, пока вы не получите следующее местоположение GPS (возле окна или снаружи)

Далее вы останавливаете gps, когда вы. в фоновом режиме [self stopGPS] почему? пусть живёт!

person AlexWien    schedule 27.03.2013

Если вы используете телефон вместо GPS, вы можете использовать сеть для служб определения местоположения. locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 300, 5, konumDinleyicisiNetwork);

person Capan    schedule 25.11.2014