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