アプリが「重要な変更位置情報サービス」を使用している場合、アプリが終了した場合でも、位置情報の更新が配信されると、iOSはそれをウェイクアップすることを知っています。
アプリが標準の位置情報サービスを使用していて、UIBackgroundModesのキーとして位置情報を指定している場合、ケースについて明確な答えを見つけることができませんでした。iOSは、アプリが終了した場合でも、更新を配信するために起動しますか?または、位置更新コールバックを取得するためにアプリをバックグラウンドで実行する必要がありますか?
更新:私がこれを求めていたとき、私はそれをテストする時間がありませんでした。しかし、ここで回答を得た後、アプリケーションのデリゲートにこのコードを記述して、位置が更新されたときに終了したアプリが再起動されるかどうかを確認しました。更新の通知を受けたときにUILocalNotificationを表示しています。ただし、アプリを終了してから市内の場所を変更したところ、アプリが再起動されず、更新がありませんでした。私が間違っているのは何なのか教えていただけますか?
更新#2:このQ&Aの最終結果によると、このコードに問題はなく、終了後に再起動されない、標準の位置情報サービスを使用するアプリの予想される動作です。
Info.plistファイルにUIBackgroundModesの1つとして場所を追加しました。
そして、これは私のアプリデリゲートの場所に関連する部分です:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
m_locManager = [[CLLocationManager alloc] init];
m_locManager.delegate = self;
[m_locManager startUpdatingLocation];
return YES;
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
[m_locManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog("%@", [NSString stringWithFormat:@"Background Fail %@", [error localizedDescription]]);
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
UILocalNotification * theNotification = [[UILocalNotification alloc] init];
theNotification.alertBody = [NSString stringWithFormat:@"Background location %.06f %.06f %@" , newLocation.coordinate.latitude, newLocation.coordinate.longitude, newLocation.timestamp];
theNotification.alertAction = @"Ok";
theNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:1];
[[UIApplication sharedApplication] scheduleLocalNotification:theNotification];
}