AndroidManifest.xmlにパーミッションを設定する。
GPSによる位置情報利用
<uses-permission android:name=”android.permission.ACCESS_FINE_LOCATION”/>
ネットワークによる位置情報利用
<uses-permission android:name=”android.permission.ACCESS_COARSE_LOCATION”/>
ロケーションマネージャーのインスタンスを取得
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
GPSの状態を取得する
locationManager.addGpsStatusListener(this);
/*
* Listener
* GPS の状態が通知されるメソッド
*/
@Override
public void onGpsStatusChanged(int event) {
// TODO 自動生成されたメソッド・スタブ
String status = "";
if (event == GpsStatus.GPS_EVENT_FIRST_FIX) {
status = "FIRST FIX:初めて位置情報を確定した:";
} else if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {
status = "SATELLITE STATUS:GPSが位置情報を取得中";
} else if (event == GpsStatus.GPS_EVENT_STARTED) {
status = "STARTED:GPSを使い位置情報の取得を開始した";
} else if (event == GpsStatus.GPS_EVENT_STOPPED) {
status = "STOPPED:GPSの位置情報取得が終了した";
}
Log.d("onGpsStatusChanged", status);
}
利用できるプロバイダの一覧表示
List<String> providers = locationManager.getAllProviders();
for (String provider : providers) {
Log.d("providers", provider);
}
実行結果:
07-17 12:55:05.809: D/providers(2053): network
07-17 12:55:05.809: D/providers(2053): passive
07-17 12:55:05.809: D/providers(2053): gps
gps(GPS, AGPS)
人工衛星より位置情報を取得する。
建物の中や、高い建物付近だとGPSが遮られて位置を取得できない。
バッテリー消費大。高精度。
network (AGPS, CellID, Wifi MACID)
携帯端末の基地局や接続しているWifiから位置情報を特定する。
バッテリー消費中。中精度。
passive(CellID, Wifi MACID)
位置情報取得設定が全てオフの場合実行される。
network との違いは、AGPSを使用しない事。
バッテリー消費小。低精度
条件を指定して最適なプロバイダを取得する。
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_LOW);//細かい位置精度
/* criteria.setBearingRequired(false); // 方位不要
criteria.setSpeedRequired(false); // 速度不要
criteria.setAltitudeRequired(false); // 高度不要
*/
String provider = locationManager.getBestProvider(criteria, true);
Log.d("getBestProvider", provider);//gps
プロバイダの状態を表示する
List<String> providers = locationManager.getAllProviders();
for (String provider : providers) {
boolean status = locationManager.isProviderEnabled(provider);
Log.d("providers", provider + "::" + status);
}
表示結果:
07-17 13:25:37.829: D/providers(2297): network::false
07-17 13:25:37.830: D/providers(2297): passive::true
07-17 13:25:37.831: D/providers(2297): gps::true
使えるプロバイダを取得する場合
List<String> providers = locationManager.getProviders(true);