記事目次
システム開発
Androidアプリにおける位置情報の取得方法
概要
Androidのアプリ開発において位置情報を利用したいことがあります。
今回は位置情報取得の推奨APIであるGoogle Location Services API(以下、LocationAPI)を用いて実装を行います。
※注意
〇LocationAPIを使用するためにはGooglePlayService(Google Play開発者サービス)が端末にインストールされている必要があります。
すべてのAndroid端末にインストールされているものではないので、プログラム等でチェックを行ってください。
〇位置情報の取得に必要となる権限は以下のものとなります。
・android.permission.ACCESS_FINE_LOCATION
権限を与えたうえで実行してください。(権限を与えずに実行すると、アプリが正しく実行しないので注意してください。)
〇位置情報取得の際には端末の位置情報機能がONである必要があります。
機能をONであることを確認してください。
実装
今回は3 STEPで紹介します。
なお、照会するコードは以下のインターフェイスが実装されたActivityのものとします。
・GoogleApiClient.ConnectionCallbacks
・GoogleApiClient.OnConnectionFailedListener
・LocationListener
GoogleApiClientに接続し、位置情報リクエストを作成する
GoogleApiClientに接続します。
GoogleApiClient mGoogleApiClient; //GoogleApiClientインスタンス変数
LocationRequest mLocationRequest; //位置情報リクエストインスタンス変数
//GoogleApiClientに接続
mGoogleApiClient = new GoogleApiClient.Builder(Activity.this)
.addApi(LocationServices.API)
.addConnectionCallbacks(Activity.this)
.addOnConnectionFailedListener(Activity.this)
.build();
接続を行うと状態に応じて以下のonConnected(),onConnectionSuspended(),onConnectionFailed()のいずれかが実行されます。
接続が完了するとonConnected()が実行されるので、onConnected()で位置情報リクエストを作成します。
@Override
public void onConnected(@Nullable Bundle bundle) {
// 接続完了時の処理
// 接続完了したのでリスエストを発行
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(1000); //更新間隔(ms)
mLocationRequest.setFastestInterval(500); //最速更新間隔(ms)
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); //精度区分
}
@Override
public void onConnectionSuspended(int i) {
// 接続が途絶えた時の処理
// 再接続などの処理を行います。
mGoogleApiClient.connect();
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
// 接続失敗時の処理
// GooglePlayServiceが端末にインストールされていない場合や
// GooglePlayServiceのアップデートが必要な場合、エラーとなりここに飛んできます。
}
位置情報の更新間隔はLocationRequest.setInterval()およびLocationRequest.setFastestInterval()で設定します。
どちらの更新間隔が適応されるかは、他の位置情報取得アプリとの干渉具合によります。
位置情報の精度はLocationRequest.setPriority()で設定します。
今回は可能な限りの最高精度で取得するため、LocationRequest.PRIORITY_HIGH_ACCURACYを設定します。
位置情報を取得する
GoogleApiClientと位置情報リクエストのインスタンスを使用して、実際に位置情報を取得します。
※この処理までに権限の付与および位置情報がONになっている前提とします。
//位置情報を取得
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, Activity.this);
位置情報の取得が完了するとonLocationChanged()が実行されます。
@Override
public void onLocationChanged(Location location) {
// 位置情報が取得(更新)されたときの処理
double latitude = location.getLatitude(); //緯度
double longitude = location.getLongitude(); //経度
}
取得されたLocationからは緯度経度のほか、高度や時間、速度などの情報を取得することができます。
位置情報の取得を終了する
更新間隔ごとに位置情報が更新されます。終了する際は以下の処理を実行します。
LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, Activity.this);
取得を再開させたいときは再度、LocationServices.FusedLocationApi.requestLocationUpdates()を実行してください。
まとめ
以上がGoogle Location Services APIを用いての位置情報取得方法となります。
位置情報の更新間隔が短かったり、精度が高かったりするとバッテリーを多く消費するので、注意して実装してください。