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;
}
});
});
}
}