3

私は現在、他の開発者が開始した iOS アプリで作業しています。ユーザーの位置を低精度 (100 メートル) で知る必要があるため、アプリは位置の変化を監視する必要があります。ロケーション関連の以前の実装は、NSTimerandを使用して行われましたstartUpdatingLocation。実行は次のようになります。

// Fire each 10 seconds start updating location
self.timerPosition = [NSTimer scheduledTimerWithTimeInterval:ti
                                                      target:self
                                                    selector:@selector(location)
                                                    userInfo:nil
                                                     repeats:YES];
[self.timerPosition fire];

ロケーションセレクターはこれを行います

// Configure & check location services enabled
...
self.locman.delegate = self;
self.locman.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[self.locman startUpdatingLocation];

そして、ロケーションマネージャーデリゲートで

[manager stopUpdatingLocation];

しかし、Apple docs でユーザーの場所を取得することについて読むと、低消費電力で場所を取得する正しい方法はstartMonitoringSignificantLocationChanges.

私の質問は、場所のタイマーを のstartMonitoringSignificantLocationChanges代わりに と組み合わせたままにするのは良い決断startUpdatingLocationですか、それともナンセンスなアプローチですか?

アプリがバックグラウンドにあるときに位置情報を取得する必要はありませんが、アプリがアクティブなときにユーザーがいつ位置を変更したかを知りたいです。

4

1 に答える 1

1

低電力の -startMonitoringSignificantLocationChanges を使用している場合、タイマーは不要であり、今後も必要ないことがわかります。このメソッドは、デバイスが変更を検出した場合にのみ、デリゲートからのコールバックに応答します。この場所の確認には GPS は使用されません。Wifi とセルタワーの三角測量が使用されますが、これは既に行われています。したがって、この方法を使用すると、バッテリー寿命を節約するために速度を落とす必要はありません。デリゲート メソッドを設定し、それに応じて応答するだけです。

あなたの場所の実装が何のためにあるのかはわかりませんが、地域の監視は、バッテリーをほとんどまたはまったく使用せずに場所の更新を取得するもう1つの優れた方法です. 地域の監視は、一般的なユーザーの場所だけでなく、特定の場所を監視する場合にはるかに役立ちます. これで問題が解決することを願っています。

于 2013-01-02T20:35:12.833 に答える