2011/12/09更新

[XCODE] iPhone もう一つの位置情報取得方法とは

このエントリーをはてなブックマークに追加            

本日はiPhoneで位置情報を取得する、もう一つの方法を記載したいと思います。

普通、位置情報を取得する際には、CLLocationManagerクラスの「startUpdatingLocation」メソッドを用います。使い方の詳細は『XCODE-iPhone 位置情報を取得するには』を見てみてください。





今回は、「Sgnificant-Change Location Service」というサービスを利用します。





Sgnificant-Change Location Serviceとは

iOS4.0以降で利用できる位置情報取得サービスです。このサービスは通常の位置情報取得サービスに比べ、電池消費量を抑えながら多くのアプリケーションに必要な精度の位置情報を提供してくれます。このサービスはデバイスが利用する電話の基地局を利用して位置情報を取得し、基地情報を移動した時点で位置情報の更新をユーザーに通知します。このサービスはアプリケーションが休止中または起動していないときにも、新規の位置情報を取得する事でアプリを起動させることができます。そのためバックグラウンドで位置情報を取得する際にも、有用な手段となりうるようです。





位置情報取得開始の方法

利用方法はCLLocationManagerクラスの「startUpdatingLocation」メソッドの代わりに、以下のように記載して位置情報取得を開始します。

if (locationManager == nil)
 locationManager = [[CLLocationManageralloc] init];

locationManager.delegate = self;

[locationManager startMonitoringSignificantLocationChanges];

「startUpdaingLocation」メソッドに比べて細かい設定がありません。CLLocationManagerクラスのインスタンスを作成し、デリゲートを指定し、「startMonitoringSignificantLocationChanges」メソッドを利用します。





位置情報取得時の対応方法

対応方法は、CLLocationManagerクラスの「startUpdaingLocation」メソッドと同じく、CLLocationManagerDelegateクラスの「locationManager:didUpdateToLocation:fromLocation:」メソッドを実装して、位置情報取得時の振る舞いを指定します。次のコードはサンプル実装です。

- (void)locationManager:(CLLocationManager *)manager 
didUpdateToLocation:(CLLocation *)newLocation 
  fromLocation:(CLLocation *)oldLocation {

// locationManager sometimes return cache object, so i shold check newLocation is row or cache.
NSTimeInterval howRecent = [newLocation.timestamp timeIntervalSinceNow];

if (abs(howRecent) < 15.0) {
 NSLog(@"latitude %+.6f, longitude %.6f", newLocation.coordinate.latitude, newLocation.coordinate.longitude);

}
// else skip the event and will process the next one.
}

ここでは取得した位置情報が(キャッシュでなく)最新のデータの場合は、経緯度をログに出すようにしています。





より詳細な情報

詳細な情報は、Location Awareness Programming Guideを参照ください。





最後に

位置情報はとにかく電池を浪費する処理のため、電池の節約が重要になるように思います。ユーザーは電池の消費量にも厳しい。位置情報を取得するアプリを作成するときには、この「Significant-Change Location Service」を検討する事は有用かもしれないなと思いました。

私、Twitter:@yoheiMuneもしていますので、もし良ければ宜しくお願いいたします。







こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。