<permission>

構文:
<permission android:description="string resource"
            android:icon="drawable resource"
            android:label="string resource"
            android:name="string"
            android:permissionGroup="string"
            android:protectionLevel=["normal" | "dangerous" |
                                     "signature" | ...] />
上位の要素:
<manifest>
説明:
このアプリまたは他のアプリの特定のコンポーネントまたは機能へのアクセスを制限するために使用するセキュリティ権限を宣言します。権限の仕組みについて詳しくは、アプリ マニフェストの概要の権限セクションとセキュリティに関するヒントをご覧ください。
属性:
android:description
ユーザーが読むことができる、権限の説明。ラベルよりも長く、参考になる情報です。たとえば、権限を別のアプリに付与するようユーザーに求める場合に、その権限についての説明をユーザーに表示します。

この属性は文字列リソースへの参照として設定します。label 属性とは異なり、未加工の文字列を設定することはできません。

android:icon
権限を表すアイコンのドローアブル リソースへの参照。
android:label
権限のユーザー可読形式の名前。

便宜上、アプリの開発中はラベルを未加工の文字列として直接設定できます。ただし、アプリを公開する準備が整ったら、ラベルを文字列リソースへの参照として設定します。そうすることで、ユーザー インターフェース内の他の文字列と同じようにローカライズできるようになります。

android:name
権限を参照するコード(<uses-permission> 要素や、アプリ コンポーネントの permission 属性など)で使用される名前。

注: すべてのパッケージが同じ証明書を使用して署名されている場合を除き、複数のパッケージで同じ名前の権限を宣言することはできません。パッケージで権限を宣言すると、ユーザーは同じ権限名の他のパッケージをインストールできなくなります(他のパッケージが最初のパッケージと同じ証明書を使用して署名されている場合を除く)。

このため、Google では、逆ドメイン形式の命名方法を使用して、権限の前にアプリのパッケージ名を接頭辞として付加することをおすすめします。この接頭辞の後に .permission. を付加し、その後に権限が表す機能の説明を大文字の SNAKE_CASE 形式で指定します(例: com.example.myapp.permission.ENGAGE_HYPERSPACE)。

このおすすめの方法を採用すると、名前の競合を回避し、カスタム権限の所有者と意図を明確に示すことができます。

android:permissionGroup
この権限を割り当てるグループ。この属性の値はグループ名です。グループ名は、このアプリまたは別のアプリで <permission-group> 要素を使用して宣言します。この属性が設定されていない場合、権限はグループに属しません。
android:protectionLevel

権限に含まれている可能性があるリスクと、権限をリクエスト元のアプリに付与するかどうかを決める際にシステムが従う手順を指定します。

各保護レベルは、基本権限タイプと 0 個以上のフラグで構成されます。たとえば、"dangerous" 保護レベルにはフラグがありません。一方、"signature|privileged" 保護レベルは "signature" 基本権限タイプと "privileged" フラグを組み合わせたものです。

次の表で、すべての基本権限タイプについて説明します。フラグの一覧については、protectionLevel をご覧ください。

意味
"normal" デフォルト値。分離されたアプリレベルの機能へのアクセスをリクエスト元のアプリに提供する低リスクの権限。他のアプリ、システム、ユーザーに対するリスクを最小限に抑えることができます。システムはリクエスト元のアプリに対し、このタイプの権限をインストール時に自動的に付与します。ユーザーによる明示的な承認を求めることはありません。ただし、ユーザーはインストール前にいつでもこれらの権限を確認できます。
"dangerous" リクエスト元のアプリによる個人データへのアクセスあるいはデバイスの管理を許し、ユーザーに悪影響を及ぼす高リスクの権限。このタイプの権限はリスクが高いため、システムがリクエスト元のアプリに自動的に権限を付与することはありません。たとえば、アプリからリクエストされた危険な権限がユーザーに表示され、先に進む前に確認が必要になることがあります。このような機能の使用にユーザーが知らずに同意することを防ぐため、他のなんらかのアプローチがとられる場合もあります。
"signature" 権限を宣言したアプリと同じ証明書がリクエスト元のアプリの署名に使用されている場合にのみシステムから付与される権限。証明書が一致した場合、システムが自動的に権限を付与します。ユーザーに通知したり、ユーザーによる明示的な承認を求めたりすることはありません。
"knownSigner" 許可された証明書がリクエスト元のアプリの署名に使用されている場合にのみシステムから付与される権限。リクエスト元の証明書が記載されている場合は、ユーザーに通知したり、ユーザーの明示的な承認を求めたりすることなく、システムが自動的に権限を付与します。
"signatureOrSystem"

"signature|privileged" の以前の同義語。API レベル 23 で非推奨になりました。

Android システム イメージの専用フォルダにインストールされているアプリ、または権限を宣言したアプリと同じ証明書を使用して署名されたアプリにのみシステムから付与される権限。"signature" 保護レベルはほとんどのニーズを満たし、アプリのインストール場所を問わず機能するため、このオプションは使用しないでください。

"signatureOrSystem" 権限は、複数のベンダーがアプリをシステム イメージに組み込んでおり、特定の機能がまとめてビルドされているという理由でそれらを明示的に共有する必要がある特殊な状況で使用されます。

導入時の API レベル:
API レベル 1
関連項目:
<uses-permission>
<permission-tree>
<permission-group>