3

このアプリでは、CoreLocation を使用してユーザーの位置情報を取得しています。startUpdatingLocation を呼び出すと、毎回 locationManager:didUpdateLocations が呼び出されると思いました。しかし、最初に呼び出されると、もう呼び出されることはありません。

私の AppDelegate.m で:

- (void) startStandardUpdates {
 if (_locationManager == nil) {
    _locationManager = [[CLLocationManager alloc] init];
    [_locationManager setDelegate:self];
    _locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    _locationManager.distanceFilter = 10;
    [_locationManager startUpdatingLocation];

 } else {
    NSLog(@"[LOCATION]: Location Manager already exists.");
    [_locationManager startUpdatingLocation];
 }
}

次に、NSTimer で呼び出します。

- (void) startTask {
  NSLog(@"Start task called.");
  [NSTimer scheduledTimerWithTimeInterval:15
                                   target:self
                                 selector:@selector(actualTask)
                                 userInfo:nil
                                  repeats:YES];
}

- (void) actualTask {
  NSLog(@"[TASK]: Starting location service...");
  [self startStandardUpdates];
}  

上記のコードは 15 秒ごとに startUpdatingLocation を呼び出す必要がありますが、didUpdateToLocation メソッドは 2 回目に呼び出されません (最初の呼び出しは成功しました...)。

didUpdateToLocation を「プログラムで」呼び出す(または強制する)方法はありますか? それとも、didUpdateToLocation が場所を取得するまで待つ必要がありますか? x分/秒ごとにユーザーの場所を取得する方法を検索しましたが、誰もそれを成功させていないようです。私がやりたいことは、Android が Service クラスでそれを行う方法とまったく同じです (iOS にはこれがありません)。

どんな助けでも大歓迎です。
ありがとうございました。

4

4 に答える 4

5

_locationManager.distanceFilter=10; 距離フィルターが 10m に設定されているため、通知されません。位置が移動して距離フィルターの設定を超えると、 didUpdateToLocation コールバックが返されます...

于 2012-12-16T04:46:42.680 に答える
1

うーん。UpdatingLocation を開始したら、それは進んでいます。選択した精度に基づいてほぼノンストップなので、開始し続ける必要はありません。精度に一致する重要な場所の変更を待ちます...この効率と電力のトレードオフをすべて処理します。シミュレーターを使って走行ルートを選択してみましたか?動きの感覚をつかむのに役立つかもしれません (一度だけ開始してください)。

15 秒ごとに ping を送信するだけでよい場合は、更新を開始してから、タイマーで 15 秒ごとに現在の位置/進行方向を読み取るだけですか?

- (void) actualTask {
    NSLog("Currently at: %@", MyLocationManager.location.coordinate);
}
于 2012-12-16T03:54:32.250 に答える
0

didUpdateLocations建物や複合施設にいる場合は呼び出されないと思います。デバイスでビルドするなどのリアルタイムテストができる場合は、オープンスペースに移動するだけで、GPS がデータを取得でき、データを受信できます。あなたが歩くなら、それも頻繁にはなりませんdidUpdateLocations。車/バスまたは自転車でテストする必要があります。

于 2016-06-15T11:27:26.357 に答える