2013年7月17日水曜日

GPSを利用する

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);


関連記事

0 件のコメント:

コメントを投稿