モケラ

Tech Sheets

mokelab

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());

一覧に戻る