Google Play Services経由で最後に取得した位置情報を取得する
最終更新日:2015-06-01
Google Play Servicesでは、最後に取得した位置情報を一定時間キャッシュしています。ここでは、そのキャッシュされた位置情報を取得してみます。やや不正確ですが、結果はすぐ取得できます。
GoogleApiClientオブジェクトを作成する
Google Play Services 6.5より、位置情報APIはGoogleApiClient経由で行うように変更されました。なのでまずGoogleApiClientオブジェクトを作成します。addApi()にはLocationServices.APIを指定します。
mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
Google Play Serviceに接続する/接続を解除する
FragmentのonStart()とonStop()で接続処理と接続解除処理を実行します。
@Override
public void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
@Override
public void onStop() {
super.onStop();
if (mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
}
接続できたら、位置情報を取得する
接続が完了し、GoogleApiClient.ConnectionCallbacksのonConnected()がよばれた時点で位置情報を取得します。取得はLocationServices.FusedLocationApi.getLastLocation()を呼ぶだけです。端末起動直後など、位置情報のキャッシュがない場合はnullを返すのでチェックしましょう。
Location lastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (lastLocation == null) { return; }
Log.v("Location", "lat=" + lastLocation.getLatitude() + " lon=" + lastLocation.getLongitude());