<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

描述该权限可能隐含的风险,并指示系统在确定是否将权限授予请求该权限的应用时应遵循的程序。

每个保护级别都包含一个基本权限类型和零个或多个标志。例如,"dangerous" 保护级别没有标志。相比之下,保护级别 "signature|privileged""signature" 基本权限类型和 "privileged" 标志的组合。

下表显示了所有基本权限类型。有关标志列表,请参阅 protectionLevel

含义
"normal" 默认值。风险较低的权限,可让请求应用访问隔离的应用级功能,对其他应用、系统或用户的风险极小。系统会在应用安装时自动向请求应用授予此类权限,无需用户明确批准,但用户始终可以选择在安装前查看这些权限。
"dangerous" 风险较高的权限,可让请求应用访问用户私人数据或控制设备,这可能对用户产生负面影响。由于此类权限存在潜在风险,系统可能不会自动将其授予请求应用。例如,应用请求的任何危险权限都可能会显示给用户,并要求用户在继续操作前进行确认,或者可以采取其他方法来避免用户自动授予此类设施的使用权限。
"signature" 系统仅在请求应用与声明该权限的应用使用相同证书签名时才授予的权限。如果证书匹配,系统会自动授予权限,而无需通知用户或征求用户的明确批准。
"knownSigner" 系统仅在请求应用使用允许的证书签名时才授予的权限。如果请求者的证书已列出,系统会自动授予权限,而无需通知用户或征求用户的明确批准。
"signatureOrSystem"

"signature|privileged" 的旧同义词。已在 API 级别 23 中废弃。

系统仅授予位于 Android 系统映像专用文件夹中与声明该权限的应用使用相同证书签名的应用。避免使用此选项,因为 "signature" 保护级别足以满足大多数需求,并且无论应用安装在哪里都可以使用。

"signatureOrSystem" 权限用于某些特殊情况,即多个供应商的应用被内置到系统映像中,并且需要明确共享特定功能,因为它们是共同构建的。

引入于
API 级别 1
另请参阅
<uses-permission>
<permission-tree>
<permission-group>