Android 10 では、アプリによるデバイスの位置情報へのアクセスを 3 段階で管理できます。
Android 9 以前では、アプリによる位置情報へのアクセスをいったん許可または拒否すると、その選択が固定化されていました。選択できるオプションは拒否または許可で、許可を選択した場合はアプリが常に(フォアグラウンドとバックグラウンドで)アクセスできるようになっていました。Android 10 には位置情報の 3 段階のアクセス許可が導入され、デバイスの位置情報にアクセスしようとするアプリに対して 3 つのオプションを与えることができます。ユーザーは権限レベルを選ぶか拒否するよう促されます。
通常、ユーザーのデバイスには図 1 のような 3 つのオプションが表示されます。ただし、2 つのオプションだけとなるユースケースもあり、その場合は 2 つしか表示されません。
図 1. 3 段階の通知画面
次の 3 つのオプションがあります。
- 常に許可: アプリが使用中ではない場合(バックグラウンドで実行中)でも、デバイスの現在地がアプリに認識されます。これは Android 9 以前の権限と同じです。
- アプリが使用中の場合のみ許可: デバイスが位置情報を認識できるのは、アプリがアクティブに実行されている場合のみです。
- 許可しない: デバイスの位置情報をアプリは認識できません。これは、Android 9 以前のアクセスの拒否と同じです。
アプリが権限をリクエストすると、ユーザーは位置情報へのアクセスを許可するよう求められます。
ユーザーが [アプリの使用中のみ許可] を選択した場合、アプリがさらに [常に許可] をリクエストすることがあります。ユーザーのデバイスにリクエスト ダイアログが表示されます(図 2 に示します)。ユーザーが [使用中のアクセスの維持] を選択した場合、次にアプリがデバイスの位置情報にアクセスする際は [次回から表示しない] というオプションが表示されます。
Android 10 をターゲットとするアプリが次のような状況の場合、ダイアログが表示されます。
- アクセスが許可されてから 24 時間が経過した。
- アプリがバックグラウンドでのみ位置情報を受信している。
- 画面がオンの状態で、ユーザーが別のアプリを利用していない。
図 2. 段階的なアクセス許可
権限のリクエストに関する詳細については、アプリによるデバイスの位置情報へのアクセスをご覧ください。Android 9 以前を対象とするアプリの場合は、ユーザー開始型アクションの継続をご覧ください。
影響
Android 10 の場合、バックグラウンドでデバイスの位置情報アクセスが必要なアプリは、位置情報の 3 段階のアクセス許可機能の対象となります。
アプリのコードは変更できますが、許可に関連するフレームワークの動作を変更またはカスタマイズすることはできません。
実装
位置情報の 3 段階のアクセス許可は、アプリのターゲット SDK に関係なく、Android 10 のアプリに適用されます。
アプリの使用例の実装(アップグレード時)については、デベロッパー向けドキュメントのデバイス アップグレード シナリオの設計セクションをご覧ください。
さまざまなユースケース(Google マップや Google Play 開発者サービスのように、アプリがバックグラウンドでの位置情報へのアクセスが必要な場合など)に対してアクセスを可能にする方法について、アプリによるデバイスの位置情報へのアクセスに関するページで以下のトピックをご覧ください。
アプリ内での位置情報へのアクセス
ユーザーは、必要に応じて、アプリのアクセス許可を [許可しない] または [アプリの使用中のみ許可] に変更できます。アプリ内での位置情報へのアクセス許可およびすべてのファースト パーティ アプリとサードパーティ アプリに対して、次の表に示すように、ユーザー コントロール レベルを提供してください。
アプリがリクエストする必要がある権限タイプ | 提供するユーザー オプション |
---|---|
アプリがフォアグラウンドでの権限のみをリクエスト | アプリの使用中のみ許可 拒否 |
アプリが常に権限をリクエスト(フォアグラウンドとバックグラウンド) | 常に許可 アプリの使用中のみ許可 拒否 |
位置情報へのアクセス リクエストを行うすべてのアプリ | アプリの使用中のみ許可 |
これらの権限は、すべての位置情報リクエストに適用されます。アプリの使用中のみ許可の権限を持つアプリには、バックグラウンドでのスキャン(Wi-Fi、モバイル)が許可されません。
Android 11 以前では、アプリの使用中のみ許可の権限を持つアプリには、バックグラウンドでの Bluetooth スキャンが許可されません。Android 12 以降では、アプリの使用中のみ許可の権限を持つアプリは、neverForLocation
属性の値に android:usesPermissionFlags
を設定することで、Bluetooth スキャンの結果を取得できます。詳しくは、アプリが物理的な位置情報を取得しない場合をご覧ください。
OS のアップグレード
Android 10 への OS のアップグレードを行うと、アプリの位置情報の権限が次のように変更されます。
- オンは、使用中のみ許可になります。
- オフは、オフ(拒否)のままとなります。
- 事前に付与された位置情報へのアクセス権限は、使用中のみ許可に対する事前の付与となります。