逆引きAndroid入門 位置情報を取得するには/GPSを使用するには

位置情報を取得するには/GPSを使用するには

android.locationパッケージ - LocationManagerクラス、
android.locationパッケージ - LocationListenerインターフェース、
android.locationパッケージ - Locationクラス、
android.locationパッケージ - LocationProviderクラスを使用します。

 

LocationManager

  • LocationManagerインスタンスを取得するには、Context.getSystemService(LOCATION_SERVICE)を呼び出します。 
  • 位置情報の更新を取得するには、requestLocationUpdates()を呼び出します。
    第1引数には、LocationManager.GPS_PROVIDER、
    第4引数には、LocationListenerインスタンスを渡します。
  • 位置情報の更新の取得が不要になったら、removeUpdates()を呼び出します。
  • AndroidManifest.xmlには、以下の定義が必要です。
    <uses-permission android:name="android.permission.android.permission.ACCESS_FINE_LOCATION"/>
    ※LocationManager.GPS_PROVIDERでなく、
     LocationManager.NETWORK_PROVIDERを使用する場合には、ACCESS_COARSE_LOCATIONも必要です。

 

LocationListener

  • GPSの位置情報を取得したいクラスでLocationListenerインターフェースを実装します。
  • 位置情報が更新されると、onLocationChanged()が呼び出されます。
    引数として渡されたLocationを参照することで位置情報の詳細を取得できます。
  • 位置情報のステータスが更新されると、onStatusChanged()が呼び出されます。

 

Location

  • Latitude(緯度)を取得するには、getLatitude()を呼び出します。
  • Longitude(経度)を取得するには、getLongitude()を呼び出します。
  • Accuracy(精度)を取得するには、getAccuracy()を呼び出します。
  • Altitude(標高)を取得するには、getAltitude()を呼び出します。
  • Timeを取得するには、getTime()を呼び出します。
  • Speedを取得するには、getSpeed()を呼び出します。
  • Bearingを取得するには、getBearing()を呼び出します。

 

サンプルソースコード

package com.adakoda.locationtest;

import android.app.Activity;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.util.Log;

public class LocationTestActivity extends Activity implements LocationListener {
    private LocationManager mLocationManager;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    }
    
    @Override
    protected void onResume() {
        if (mLocationManager != null) {
            mLocationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER,
//                LocationManager.NETWORK_PROVIDER,
                0,
                0,
                this);
        }
        
        super.onResume();
    }
    
    @Override
    protected void onPause() {
        if (mLocationManager != null) {
            mLocationManager.removeUpdates(this);
        }
        
        super.onPause();
    }


    @Override
    public void onLocationChanged(Location location) {
        Log.v("----------", "----------");
        Log.v("Latitude", String.valueOf(location.getLatitude()));
        Log.v("Longitude", String.valueOf(location.getLongitude()));
        Log.v("Accuracy", String.valueOf(location.getAccuracy()));
        Log.v("Altitude", String.valueOf(location.getAltitude()));
        Log.v("Time", String.valueOf(location.getTime()));
        Log.v("Speed", String.valueOf(location.getSpeed()));
        Log.v("Bearing", String.valueOf(location.getBearing()));
    }

    @Override
    public void onProviderDisabled(String provider) {

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        switch (status) {
        case LocationProvider.AVAILABLE:
            Log.v("Status", "AVAILABLE");
            break;
        case LocationProvider.OUT_OF_SERVICE:
            Log.v("Status", "OUT_OF_SERVICE");
            break;
        case LocationProvider.TEMPORARILY_UNAVAILABLE:
            Log.v("Status", "TEMPORARILY_UNAVAILABLE");
            break;
        }
    }
}

参考ページ