2010年4月22日木曜日

iPhoneアプリでCLLocationManagerを使わない場合に位置情報サービスが許可されているかどうかを判断するには?

CLLocationManagerを使わない場合に位置情報サービスが許可されているかどうかを判断するにはどうするか?

普通にCLLocationManagerを使う場合はCLLocationManagerのデリゲートのlocationManager:didUpdateToLocation:fromLocation:が呼ばれないので問題ないだろう。

しかし、MKMapViewは内部で位置情報サービスを使っているようで、必ずしもCLLocationManagerを独自に使う必要がない場合がある。

こういったケースで実際にCLLocationManagerを使わないまでも、CLLocationManager.locationServicesEnabledで判断すれば良さそうだが、これは「設定」>「一般」>「位置情報サービス」がONになっているかどうかを判断するだけで、アプリ上で出る「〜は現在の位置情報を利用します。よろしいですか?」でOKされたかどうかは判断できないようだ。

そこで、例えばこうする。

//ロケーションサービスが利用可能かどうか
CLLocation *loc = mapView.userLocation.location;
if (!loc){
  NSLog(@"ロケーションサービス利用不可");
}

ユーザーが位置情報の利用を許可しなかった場合はuserLocation.locationの中身が取得出来ないことを利用した。