1

これは私のロケーションマネージャーコードです

locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy=kCLLocationAccuracyNearestTenMeters;
locationManager.distanceFilter = 200;
mapView.showsUserLocation=true;
[locationManager startUpdatingLocation];      

これは startupdatelocation にも使用される別の関数です

- (void)startLocationManager:(NSTimer *)timer
{  
   [locationManager startUpdatingLocation];
   [timer invalidate];
    timer = nil;
}

そしてここに

 - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    NSLog(@"Testing");

    CLLocationCoordinate2D location;
    location.latitude=newLocation.coordinate.latitude;
    location.longitude=newLocation.coordinate.longitude;

    [locationManager stopUpdatingLocation];

    [NSTimer scheduledTimerWithTimeInterval:60
                             target:self
                           selector:@selector(startLocationManager:)
                           userInfo:nil
                            repeats:NO];
}

これは正常に機能していますが、アプリはバックグラウンドで実行されません。ロケーションマネージャーを削除してNStimer停止しない場合、アプリはバックグラウンドで完全に正常に実行されます。1分ごとにロケーションマネージャーを実行して座標を更新したい. アプリはバックグラウンドでも実行する必要があります。

4

1 に答える 1

0

ガイドを見ることができます(特に「アプリでサポートされているバックグラウンドタスクの宣言」のセクション)。特にそれはそれを述べています

バックグラウンドでユーザーの位置を追跡する方法はいくつかありますが、そのほとんどは、アプリをバックグラウンドで継続的に実行する必要はありません。

  • 重要な変更の位置情報サービス(推奨)
  • フォアグラウンドのみの位置情報サービス
  • バックグラウンドロケーションサービス

バックグラウンドにいるようにロケーションマネージャを使用しないでください。

ユーザーに継続的な位置情報の更新を提供するアプリ(バックグラウンドにある場合でも)は、Info.plistファイルにUIBackgroundModesキー(位置情報を含む)を含めることで、バックグラウンドの位置情報サービスを有効にできます。UIBackgroundModesキーにこの値を含めても、システムがアプリを一時停止することを妨げることはありませんが、配信する新しい位置データがあるたびにアプリをウェイクアップする必要があることをシステムに通知します。したがって、このキーを使用すると、アプリをバックグラウンドで効果的に実行して、場所の更新が発生するたびに処理できます。

これを行う方法についてもう少し情報が記載されたチュートリアルがここにあります。

于 2012-07-19T12:25:55.920 に答える