<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
对表示权限的图标的 drawable 资源的引用。
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 level 23 中已弃用。

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

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

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