<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>