4

私はウォーキングトラックタイプのアプリに取り組んでいますが、アプリがバックグラウンドにあるときに場所がどのように更新されるかという問題に直面しています。場所の更新とタイマーとして地図上にパスを描いています。次に、私がそれをどのように処理するかを提案してください。ここに私のコードがあります

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{  
    if(!newLocation) return;

    if ((oldLocation.coordinate.latitude != newLocation.coordinate.latitude) &&
        (oldLocation.coordinate.longitude != newLocation.coordinate.longitude))
    {        
      // to  draw path as new location find
        jogPoint = [[JogPoint alloc] initWithCenterCoordinate:newLocation.coordinate];

        [jogPoints addObject:jogPoint];


         if([jogPoints count] >= 5) {

            [self.mapView addOverlay:jogPoint];

            CLLocation *loc1 = [[CLLocation alloc] initWithLatitude:oldLocation.coordinate.latitude longitude:oldLocation.coordinate.longitude];


            CLLocation *loc2 = [[CLLocation alloc] initWithLatitude:newLocation.coordinate.latitude longitude:newLocation.coordinate.longitude];
            // returns distance in meters
          distnc+=[loc1 distanceFromLocation:loc2] ;
            distanceLabel.text=[NSString stringWithFormat:@"%lf",distnc];

       //  jogInfo.distance += ([loc1 distanceFromLocation:loc2]) * 0.000621371192;

           // jogInfo.eclapsedTime = (CFAbsoluteTimeGetCurrent() - startTime) * 1000 * 60;



        }
    }
 }
4

2 に答える 2

4

アプリケーションがバックグラウンド モードの場合、位置情報はアプリの場合と同様に追跡/更新されます。アクティブなので心配しないでください :)

CLLocationManagerそのようなものを作成することを確認してください

self.currentLocation = [[CLLocationManager alloc]init];
self.currentLocation.desiredAccuracy = kCLLocationAccuracyHundredMeters;
self.currentLocation.delegate = self;
[self.currentLocation startUpdatingLocation];

編集済み:

ここで設定した場合distanceFilter、値が設定された特定のメーターでメソッドが呼び出されます。distanceFilterそれ以外の場合は、デバイスが移動するたびに更新されます

そして、これはファイルに設定/追加する Require background modeことが非常に重要です。値はYourProjectName-Info.plistApp Registers for location update

そのような

ここに画像の説明を入力

于 2013-09-12T05:59:03.270 に答える
0

重要な変更位置情報サービスを使用して、位置情報イベントを受け取ることができます。

このサービスは大幅な省電力を実現し、ほとんどのアプリで十分な精度を提供します。デバイスのセルラー無線を使用してユーザーの位置を特定し、その位置の変化を報告することで、システムが他の方法よりもはるかに積極的に電力使用を管理できるようにします。このサービスは、現在停止中または実行されていないアプリを起動して、新しい位置データを配信することもできます。

重要な変更位置情報サービスを使用するには:

CLLocationManager クラスのインスタンスを作成し、それにデリゲートを割り当てて、startMonitoringSignificantLocationChanges メソッドを呼び出します。ロケーション データが利用可能になると、ロケーション マネージャは割り当てられたデリゲート オブジェクトに通知します。場所の更新が既に配信されている場合は、新しいイベントが配信されるのを待たずに、CLLocationManager オブジェクトから直接最新の場所データを取得することもできます。

于 2013-09-12T06:04:36.373 に答える