CLLocationManager に位置情報更新通知の遅延を要求する

  • 3
    Like
  • 0
    Comment

概要

func allowDeferredLocationUpdates(untilTraveled distance: CLLocationDistance, timeout: TimeInterval)

allowDeferredLocationUpdates(untilTraveled:timeout:)

GPS精度の位置情報が必要だがすぐには必要ないという場合にこのメソッドを活用することで、バックグラウンドでの位置情報更新を遅延させてバッテリーの使用を最適化する。システムはこのメソッドで指定された距離、時間を条件として遅延を実施する。遅延している間の位置情報はGPSハードウェアにキャッシュする。

遅延された位置情報更新通知が実行されると、デリゲートの locationManager(_:didFinishDeferredUpdatesWithError:) が呼び出される。そしてキャッシュされた位置情報が locationManager(_:didUpdateLocations:) に渡される。

実装例

条件: 100m 移動、10秒経過

manager.allowDeferredLocationUpdates(untilTraveled: 100, timeout: 10)

条件: 100m 移動、時間未指定
CLTimeIntervalMax で時間を未指定。

manager.allowDeferredLocationUpdates(untilTraveled: 100, timeout: CLTimeIntervalMax)

条件: 移動距離未指定、10秒経過
CLLocationDistanceMax で距離を未指定。

manager.allowDeferredLocationUpdates(untilTraveled: CLLocationDistanceMax, timeout: 10)

注意

一般的には locationManager(_:didUpdateLocations :) でこのメソッドを実行する。

GPSを利用可能であり、位置情報サービスの精度が kCLLocationAccuracyBest kCLLocationAccuracyBestForNavigation である場合にのみ有効。

distanceFilter プロパティには kCLDistanceFilterNone を指定しなければならない。

エラー時には CLError.Code が返却される。

このメソッドを連続して実行すると、以前の処理がキャンセルされ、デリゲートに deferredCanceled が返却される。

システムが停電力状態にしか動作しない。アプリがフォアグラウンドにある場合やデバッグ最中には遅延が実施されない。Xcodeに接続中は停電力状態にならないので注意。