0

位置情報を取得しようとしていますが、継続的な更新は必要ありません。最新の値を取得する必要があることを暗示する特定の不定期のユーザー アクションがあるため、位置データを「更新」して、現在の値が何であれ取得したいと考えています。

電力使用量などの点で、デバイス上で可能な限り最高の市民になりたいと思っています。また、可能な限り最小の粒度 (3km 以上) の変更のみが必要です。

  • 私が理解しているように、場所の「ポイントサンプル」だけが必要な場合でも、長期にわたる変更監視プロセスを開始する必要があります (「重要な場所の変更」または非セルデバイスの通常のいずれか)。これは正しいです?
  • このプロセスが実行されていると仮定して、現在の場所が必要な場合は、場所の管理者に直接尋ねることができますよね? (デリゲート メソッドに渡された最新のものを隠しておくのではなく)。
  • もしそうなら、おそらく、アプリがバックグラウンドのときにこれをシャットダウンし、フォアグラウンドのときに再起動するのが合理的ですか? (変更の背景から目を覚ます必要はありません/したくありません。)
  • ロケーションマネージャーを実行し続けるよりも、時折データを取得する邪魔にならない方法はありますか?
  • 私がやるべきことを見逃していることは他にありますか?

ここでの説明は大歓迎です。ドキュメントは、ベスト プラクティスについて特に明確ではありません。ありがとう。

4

2 に答える 2

3

このクラスを使用するには多くの方法があります。基本的なアプローチは、アプリのデリゲートで次のように初期化することです。

locmgrというアプリデリゲートで呼び出されるプロパティを設定します-

 @property (nonatomic,strong) CLLocationManager *locmgr;

アプリ デリゲートのインターフェイス セクションの CLLocationManagerDelegate にも準拠します。

次に、applicationDidFinish ....で初期化します。

self.locmgr = [[CLLocationManager alloc] init];
self.locmgr.delegate = self;
self.locmgr.distanceFilter = 1500.0f;  //only update when location changes this much
self.locmgr.desiredAccuracy = kCLLocationAccuracyThreeKilometers; //change for better accuracy
[self.locmgr setPurpose:@"this app needs location services"];
[self.locmgr startUpdatingLocation];

次に、デリゲート コールバックを追加します

 - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation      *)newLocation fromLocation:(CLLocation *)oldLocation {
    NSLog(@"location updated to new location:%@",newLocation);
    //put your logic - maybe save it to a property and reference it when needed

 }

バックグラウンド時にオフにします

 - (void)applicationDidEnterBackground:(UIApplication *)application
 {
         [self.locmgr stopUpdatingLocation];
 }

アプリのデリゲートのフォアグラウンド/バックグラウンドでサービスのオンとオフを切り替えるのが好きです。位置情報サービスが必要になる頻度が減ったようです。おそらく、それを開始および停止するためのアプリ デリゲートのメソッドです。ただし、位置情報サービスの更新を開始してから正確な値が得られるまでに 1 ~ 2 秒かかることがあります。フィルタを正しく設定すれば、余分な電力消費はほとんど発生しません。

それが役に立ち、プロジェクトで使用できるものになることを願っています。

于 2013-03-13T03:13:34.640 に答える
1

「特定の時折のユーザー アクション」の後にのみ情報を取得することに関心がある場合は、それらのアクションが発生したときに更新を開始し、startUpdatingLocation と stopUpdatingLocation を使用して必要なデータを取得したら更新を停止します。監視をオフにする前に、データのタイムスタンプをチェックして最新であることを確認する必要があります。また、データの精度を調べて、停止する前により正確なデータを待ちたいかどうかを確認することもできます。

于 2013-03-13T02:57:08.223 に答える