バックグラウンドから位置情報をリクエストする

このページでは、以下の項目について説明します。

  • バックグラウンドでの位置情報へのアクセスをリクエストする方法。
  • アプリのターゲット SDK バージョンに基づいてリクエストを処理する方法。
  • おおよその位置情報に関するユーザー設定が、アプリがバックグラウンドでの位置情報を取得する方法に与える影響。
図 7. バックグラウンドでの位置情報へのアクセスを許可する [常に許可] というオプションがある設定ページ。

権限ダイアログの内容がターゲット SDK のバージョンによって異なる

Android 10(API レベル 29)を搭載したデバイス上において、アプリ内の機能からバックグラウンドで位置情報がリクエストされる場合、システム権限ダイアログに [常に許可] オプションが表示されます。ユーザーがこのオプションを選択すると、アプリの機能からバックグラウンドでの位置情報へのアクセスが可能になります。

ただし Android 11(API レベル 30)以降では、システム ダイアログに [常に許可] オプションが表示されません。代わりに、図 7 に示すように、ユーザーは設定ページでバックグラウンドでの位置情報を有効にする必要があります。

バックグラウンドでの位置情報の権限をリクエストする場合に、おすすめの方法に従って、この設定ページへのユーザーの移動をサポートできます。権限を付与するプロセスは、アプリがターゲットとする SDK のバージョンによって異なります。

Android 11 以降をターゲットとするアプリ

アプリに ACCESS_BACKGROUND_LOCATION 権限が付与されておらず、shouldShowRequestPermissionRationale()true を返した場合、ユーザーに次の内容の説明 UI が表示されるようにします。

  • アプリの機能がバックグラウンドでの位置情報へのアクセスを必要とする明確な理由。
  • ユーザーに表示される、バックグラウンドでの位置情報へのアクセスを許可する設定オプションのラベル(たとえば図 7 の [常に許可])。このラベルを入手するには getBackgroundPermissionOptionLabel() を呼び出します。このメソッドの戻り値は、ユーザーのデバイスの言語設定に合わせてローカライズされています。
  • ユーザーが権限を拒否するためのオプション。ユーザーがバックグラウンド位置情報へのアクセスを拒否した場合に、アプリの使用を続行できるようにします。
ユーザーはシステム通知をタップしてアプリの位置情報設定を変更できます。
図 8. アプリにバックグラウンドでの位置情報へのアクセスを許可したことをユーザーに知らせる通知。

Android 10 以前をターゲットとするアプリ

アプリ内の機能からバックグラウンドでの位置情報へのアクセスがリクエストされると、ユーザーにシステム ダイアログが表示されます。このダイアログから、アプリの位置情報へのアクセスを許可する、設定ページのオプションに移動できます。

アプリがすでに位置情報へのアクセスをリクエストするおすすめの方法に従っている限り、この動作に対応するための変更は不要です。

ユーザーがバックグラウンドでの位置情報の精度に影響を与える可能性がある

ユーザーがおおよその位置情報をリクエストした場合は、位置情報の利用許可に関するダイアログで選択した内容がバックグラウンドでの位置情報にも適用されます。つまり、ユーザーがアプリに ACCESS_BACKGROUND_LOCATION 権限を付与したものの、フォアグラウンドではおおよその位置情報のみへのアクセス権を付与する場合は、アプリがバックグラウンドでアクセスできるのもおおよその位置情報に限定されます。

参考情報

Android の位置情報へのアクセスについて詳しくは、以下の資料をご覧ください。

Codelab

動画

サンプル