Androidの測位方法について

Android Developerサイトの説明書読んで少しテストしてまとめ。正確なソースや検証ではありません。
基本的な流れは、requestLocationUpdates()を呼んで測位を定期的にチェックさせ、その結果をlocationListenerに返す。
locationListenerは、位置情報が得られた時点で何度でも呼び出される。
requestLocationUpdates()では更新間隔と測位方法を選択することが出来る。以下の三つ。

LocationManager.NETWORK_PROVIDER
WifiとかCell-IDを使った、比較的精度の低い測位。
LocationManager.GPS_PROVIDER
GPSを使った、比較的精度の高い測位。
LocationManager.PASSIVE_PROVIDER
他のアプリとかで測位された場合に、その位置情報を流用。

PASSIVE_PROVIDERは、他のアプリでNETWORKもしくはGPSで測位された場合に、同じ位置情報を貰って返すっぽい。
バックグラウンドで動くアプリで、測位回数を減らして電池を節約したい時に使えそう。


また、NETWORKを使うにはandroid.permission.ACCESS_COARSE_LOCATIONが、
GPSを使うにはandroid.permission.ACCESS_FINE_LOCATIONのUses Permissionが必要です。
FINEのUses Permissionがあれば、GPSもNETWORKも両方使えます。
PASSIVEはGPSの方が要らなくてもFINEの許可が必要らしい。providerはgpsもnetworkも両方返す可能性があるから、getProvider()でどちらかを判別する処理が場合によっては必要かもしれない。


また、どのproviderを使うか自分で選択する以外に、criteriaを指定してgetBestProviter()を使うことも出来る。
こっちのほうが、各機体・状況に応じて最適なproviderを選択できる気もする。ただ、選定に必要な時間とパワーがまだ不明。