-->

如何保持GPS应用,而无需停顿在后台运行(How to keep GPS app running i

2019-07-22 02:07发布

我必须保持在后台运行的GPS有问题。

我succeded保持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;
                }

            });

        });
    }
    }

Answer 1:

在您的信息的plist,添加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


Answer 2:

在建筑物内,你会经常得不到任何GPS位置。 GPS需要天空自由视图。 如果你没有得到的位置,当然,唯一的原因,让您的应用程序在后台运行的缺失,因此,IOS把你的应用程序不活动,直到你得到你的下一个GPS位置(靠窗的位置,或外部)

另外,你什么时候停止GPS。 在后台,[自stopGPS]为什么? 让它活着!



Answer 3:

如果您使用的是手机,而不是GPS,你可以使用网络的位置服务。 locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 300, 5, konumDinleyicisiNetwork);



文章来源: How to keep GPS app running in background without pauses