このページでは、アプリケーションがデバイスのデータにアクセスする、またはデバイス機能 (ビルトインのカメラやマイクなど) を使用するための権限をユーザーにリクエストする方法を説明します。
権限のリクエストに関する Google のガイドラインでは、ユーザーが権限のリクエストを一旦拒否した場合は、リクエストの理由を表示し、リクエストを再度提示することを推奨しています。
Android デバイスで権限をリクエストするタイミングと方法に関する詳細については、Android のデベロッパー向けガイドでアプリの権限に関するベストプラクティスを参照してください。
ランタイム権限 API を使用するには、Android バージョン 6 (API レベル 23) が必要です。アプリケーションのターゲット API の変更は、以下の手順で行ってください。
アプリケーションは、制限付きデータや特定のデバイス機能の使用権限をリクエストするにあたって、事前にその Android アプリマニフェストで権限を宣言する必要があります。詳細については、アプリケーションの権限の宣言を参照してください。
Android.Permission API は、アプリケーションに現在付与されている権限の確認や、アプリケーションが必要とするもののまだ付与されていない権限のリクエストに使用できる機能を提供します。
実行時の権限をリクエストする大まかなプロセスは、以下の通りです。
Permission.HasUserAuthorizedPermission を使用して、アプリケーションが必要とするデータや機能に関する権限が、すでにユーザーによって付与されているかどうかを確認します。
この API の使用方法を示すコードサンプルについては、Permission.HasUserAuthorizedPermission を参照してください。
Permission.ShouldShowRequestPermissionRationale を使用して、特定の権限リクエストの理由を表示する必要があるかどうかを確認します。
理由が必要な場合は、アプリケーションが特定のデバイス機能へのアクセスを必要とする理由とともにメッセージを表示します。メッセージを表示したら、権限に関するリクエストを送信します。
理由が必要ない場合は、直接権限リクエストの送信に進みます。
この API の使用方法を示すコードサンプルについては、Permission.ShouldShowRequestPermissionRationale を参照してください。
Permission.RequestUserPermission を使用して、データまたは機能の使用権限をリクエストします。このメソッドを呼び出すと、Android によってシステム権限ダイアログが開かれ、ユーザーはこれを使用して権限を付与するか、権限の付与を拒否できます。
この API の使用方法を示すコードサンプルについては、Permission.RequestUserPermission を参照してください。
Permission.RequestUserPermissions を使用すると、ユーザーデバイス上の複数のリソースへのアクセス権限を一度にリクエストできます。このメソッドは文字列の配列を使用しており、各文字列が特定のリソース (デバイスのカメラ、マイク、位置情報など) へのアクセス権限を表します。
これらのメソッドは、ユーザーが権限を付与または権限の付与を拒否した後に実行するコードの指定に使用できる、PermissionCallbacks オブジェクトを受け取ることができます。これを使用すると、権限リクエストがユーザーによって承認されると同時にデバイス機能の使用を開始できます。例えば、マイクからの録音を開始できます。
ヒント: 権限をリクエストする際には、ユーザーに対して、アプリケーションがなぜその機能を必要とするのかを説明するメッセージを表示することが推奨されます。
ノート: ユーザーがシステム権限ダイアログで Do not ask me again オプションを有効にしている場合、または権限について複数回拒否している場合、RequestUserPermission() はシステムダイアログを開きません。この場合、ユーザーはアプリケーション権限設定に移動し、手動で権限を有効にする必要があります。
アプリケーションが必要とする権限をユーザーが許可しなかった場合は、手動で権限リクエストダイアログを表示する方法をユーザーに提示してください。これをどのように行うかはアプリケーションによって異なりますが、Permission.RequestUserPermission を呼び出すためのボタンを配置するのも 1 つの方法です。