Copyright (C) iPhoneアプリ開発備忘録 All rights reserved.
ブログ内で記したコード、内容の正確性は保証いたしません。
記載内容を実装したことにより発生した不具合・損害等の責任は一切負いません。



2014年09月21日

iOS8で位置情報を取得する



iOS8から位置情報の取得方法が変更になった。

iOSデバイスでアプリから位置情報取得する許認可状態には、「常に許可」「アプリ使用中のみ許可」「許可しない」のステータスがある。

アプリからは、「常に許可」「アプリ使用中のみ許可」のいずれかの応答をユーザにダイアログ画面を表示することにより促し、応答内容に応じてOSがプライバシー情報として設定する。
「常に許可」というのは、バックグラウンド実行中でもCLLocationManagerを起動して位置情報を取得する状態を指す。

1. info.plist の編集
下記の2つのキーを追加する。設定したプロパティ値はユーザーに許可を促すダイアログ画面に表示される。ダイアログ画面には定型文が表示されるが、補足的な説明のための語句をこのプロパティ値に入力しておくと、定型文の下に表示される。

 NSLocationWhenInUseUsageDescription (アプリ使用中のみ許可)
 NSLocationAlwaysUsageDescription (常に許可)

2. コードの修正
処理の順序としては、(1) ユーザに位置情報の取得について「常に許可」「アプリ使用中のみ許可」のいずれかの応答を促し、(2) OKの許可が応答されれば、位置情報の取得をスタートさせる。

iOS7以前もサポートするアプリの場合、上記(1)を実行しようとすると実行クラスが存在しないため、アプリがクラッシュするので、respondsToSelector で事前にチェックして処理を振り分ける必要がある。

hoge.h
@property (nonatomic, retain) CLLocationManager *locationManager;


hoge.m
(1) ユーザに位置情報の取得について「常に許可」「アプリ使用中のみ許可」のいずれかの応答を促す。
if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { // iOS8以降

// 位置情報測位の許可を求めるメッセージを表示する
// [_locationManager requestAlwaysAuthorization]; // 常に許可
[_locationManager requestWhenInUseAuthorization]; // 使用中のみ許可

} else { // iOS7以前

// 位置測位スタート
[_locationManager startUpdatingLocation];

}


(2) 位置情報測位許可の応答がなされると呼ばれるメソッド。許可がとれたら位置測位をスタートする。
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {

if (status == kCLAuthorizationStatusAuthorizedAlways ||
status == kCLAuthorizationStatusAuthorizedWhenInUse) {

// 位置測位スタート
[_locationManager startUpdatingLocation];
}
}


(3) 位置測位が行われるたびに呼ばれるメソッド。
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {

CLLocation *newLocation = [locations lastObject];

NSLog(@"%f %f",
newLocation.coordinate.latitude,
newLocation.coordinate.longitude);

// 位置測位を終了する
[_locationManager stopUpdatingLocation];

}



参考記事:
http://qiita.com/koogawa/items/6ec24ca3201977e9642b
http://iti.hatenablog.jp/entry/2014/09/19/113940

タグ:IOS Mac apple iPAD iPhone
【CLLocation 現在位置情報の最新記事】
posted by mobileDeveloper at 23:19 | Comment(0) | TrackBack(0) | CLLocation 現在位置情報 はてなブックマーク - iOS8で位置情報を取得する | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
Apple、Appleのロゴ、App Store、iPodのロゴ、iTunesは、米国および他国のApple Inc.の登録商標です。
iPhone、iPod touch、iPadはApple Inc.の商標です。
iPhone商標は、アイホン株式会社のライセンスに基づき使用されています。
その他、本ブログに記載されている製品名、会社名は、それぞれ各社の商標または登録商標です。