【Android】LocationListenerで位置情報を取得する
GPSから位置情報を利用したアプリがよくありますが、LocationListenerを使えば緯度・経度や、高度などが取得できます。
ということでここでは、AndroidでLocationListenerを使った位置情報の取得についてまとめてみます。
実装
権限を追加
AndroidManifest.xml
以下の権限を追加します。なお、アプリケーションから権限のについては備考にまとめた記事のリンクをご確認ください。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
ACCESS_COARSE_LOCATIONはネットワーク経由で位置情報を取得するのに必要な権限です。
そのためINTERNETの権限も必要になります。
ACCESS_GPSとACCESS_FINE_LOCATIONは、GPSを使用した位置情報を取得するのに必要な権限です。
位置情報の取得処理
MainActivity.java
Activityで実装した場合の単純な例が以下になります。
public class MainActivity extends AppCompatActivity implements LocationListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
        Location location = locationManager.getLastKnownLocation(locationProvider);
        double lat = location.getLatitude();
        double lon = location.getLongitude();
    }
    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub
    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub
    }
    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub
    }
    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub
    }
}
方法としては、LocationListener(インターフェース)を実装したクラスで、LocationManagerにより取得します。
requestLocationUpdatesメソッドを実行することにより位置情報の取得が行われます。
LocationListenerのメソッドについて
| onLocationChanged | 位置情報が変化するとコールバックされる。 | 
|---|---|
| onStatusChanged | ロケーションステータスが変わるとコールバックされる。 | 
| onProviderEnabled | プロバイダが利用可能になるとコールバックされる。 | 
| onProviderDisabled | プロバイダが利用不可能になるとコールバックされる。 | 
requestLocationUpdatesメソッドの引数について
- Providerの種類
- 通知の最小時間の間隔
- 通知の最小距離の間隔
- LocationListenerのインスタンス
Providerについて
requestLocationUpdatesメソッドの第一引数に指定する文字列はプロバイダを指定します。
LocationManagerクラスの定数として定義されていますのでこれを指定します。
| GPS_PROVIDER | GPSを利用した比較的精度の高い位置情報を使う | 
|---|---|
| NETWORK_PROVIDER | ネットワークを利用した位置情報を使う | 
| PASSIVE_PROVIDER | 直近で使用された位置情報を使う | 
実行例
| 指定したPROVIDERによる位置情報を取得するサンプルです。 いずれの方法でも正しく位置情報が取得できることを確認しています。 | 
サンプルソースコード
以下に権限取得やエラー処理などを入れた実装例(上記キャプチャのアプリケーション)をアップしておきました。
https://github.com/s-watanabe-apps/gps-test/tree/develop/20181102

 
 
コメント
コメントを投稿