【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メソッドの引数について

  1. Providerの種類
  2. 通知の最小時間の間隔
  3. 通知の最小距離の間隔
  4. LocationListenerのインスタンス

Providerについて

requestLocationUpdatesメソッドの第一引数に指定する文字列はプロバイダを指定します。

LocationManagerクラスの定数として定義されていますのでこれを指定します。

GPS_PROVIDER GPSを利用した比較的精度の高い位置情報を使う
NETWORK_PROVIDER ネットワークを利用した位置情報を使う
PASSIVE_PROVIDER 直近で使用された位置情報を使う

実行例

指定したPROVIDERによる位置情報を取得するサンプルです。

いずれの方法でも正しく位置情報が取得できることを確認しています。

サンプルソースコード

以下に権限取得やエラー処理などを入れた実装例(上記キャプチャのアプリケーション)をアップしておきました。

https://github.com/s-watanabe-apps/gps-test/tree/develop/20181102

備考

【Android】アプリケーションから権限の取得方法

コメント

このブログの人気の投稿

docker-compose up で proxyconnect tcp: dial tcp: lookup proxy.example.com: no such host

docker-compose で起動したweb、MySQLに接続できない事象

【PHP】PHP_CodeSnifferを使う(コーディングルールのカスタマイズ)