Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

直近の位置情報を取得する

アプリでは、Google Play 開発者サービスの位置情報 API を使用して、ユーザーのデバイスの直近の位置情報をリクエストできます。ほとんどの場合、アプリが必要とする位置情報はユーザーの現在地です。通常、これはデバイスが最後に確認された場所に対応します。

デバイスの直近の位置情報を取得するには、融合された位置予測プロバイダを使用します。融合された位置予測プロバイダは Google Play 開発者サービスの位置情報 API の 1 つです。基盤となる位置情報テクノロジーを管理し、高精度や省電力といったハイレベルの要件を指定できるシンプルな API を提供します。また、デバイスの電池の消費を最適化します。

注: アプリがバックグラウンドで実行される場合、位置情報へのアクセスがアプリの中核的機能にとって必要不可欠であることと、位置情報へのアクセスをユーザーに適切に開示することが要件として求められます。

このレッスンでは、融合された位置予測プロバイダの getLastLocation() メソッドを使用して、デバイスの位置情報を 1 回だけリクエストする方法を説明します。

Google Play 開発者サービスをセットアップする

融合された位置予測プロバイダにアクセスするには、アプリの開発プロジェクトに Google Play 開発者サービスが含まれている必要があります。Google Play 開発者サービスのコンポーネントを SDK Manager でダウンロードしてインストールし、ライブラリをプロジェクトに追加します。詳細については、Google Play 開発者サービスをセットアップする方法のガイドをご覧ください。

アプリの権限を指定する

位置情報サービスを使用する機能を含むアプリは、その機能のユースケースに応じて、位置情報権限をリクエストする必要があります。

位置情報サービス クライアントを作成する

アクティビティの onCreate() メソッドで、融合された位置予測プロバイダ クライアントのインスタンスを作成します。次のコード スニペットをご覧ください。

Kotlin

private lateinit var fusedLocationClient: FusedLocationProviderClient

override fun onCreate(savedInstanceState: Bundle?) {
    // ...

    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
}

Java

private FusedLocationProviderClient fusedLocationClient;

// ..

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...

    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
}

直近の現在地情報を取得する

位置情報サービス クライアントを作成すると、ユーザーのデバイスが最後に確認された場所の位置情報を取得できます。アプリがこれらに接続されていれば、融合された位置予測プロバイダの getLastLocation() メソッドを使用してデバイスの位置情報を取得できます。この呼び出しが返す位置情報の精度は、位置情報権限をリクエストする方法のガイドに記載されているとおり、アプリ マニフェストの権限設定によって決まります。

直近の位置情報をリクエストするには、getLastLocation() メソッドを呼び出します。次のコード スニペットは、リクエストと、レスポンスの簡単な処理方法を示しています。

Kotlin

fusedLocationClient.lastLocation
        .addOnSuccessListener { location : Location? ->
            // Got last known location. In some rare situations this can be null.
        }

Java

fusedLocationClient.getLastLocation()
        .addOnSuccessListener(this, new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                // Got last known location. In some rare situations this can be null.
                if (location != null) {
                    // Logic to handle location object
                }
            }
        });

getLastLocation() メソッドは、地理的位置の緯度と経度の座標を含む Location オブジェクトの取得に使用できる Task を返します。位置情報オブジェクトは、次の状況では null になる可能性があります。

  • デバイスの設定で位置情報がオフになっている。位置情報を無効にするとキャッシュも削除されるため、直近の位置情報が以前に取得されていても、結果が null になる可能性があります。
  • デバイスが位置情報を記録していなかった。このケースは、新しいデバイスまたは出荷時の設定に戻されたデバイスで起きる可能性があります。
  • デバイスで Google Play 開発者サービスが再起動されたが、サービスの再起動後に位置情報をリクエストしたアクティブな融合された位置予測プロバイダ クライアントが存在しなかった。この状況を回避するには、新しいクライアントを作成して、独自に位置情報の更新データをリクエストします。詳細については、現在地の更新情報を受け取るをご覧ください。

現在の最良推定値を維持する

最後に呼び出した getLastLocation() で取得した Location オブジェクトが最も正確に思えるかもしれませんが、位置情報の精度は変化するため、最後に取得した値が最良とは限りません。複数の基準に基づいてどの位置情報を表示するかを選択するロジックが必要です。また、そのような基準のセットも、アプリのユースケースやフィールド テストの結果によって異なります。

getLastLocation() から返される位置情報の精度を検証するには、以下の手順を実施します。

  • 取得した位置情報が前回取得した位置情報より十分に新しいかを確認します。
  • 位置情報に求められる精度が前回の推定値の精度より高いか低いかを確認します。
  • 新しい位置情報に関連付けられているプロバイダを確認します。このプロバイダが、アプリのキャッシュに保存されている位置情報のプロバイダより信頼性が高いかどうかを判定します。