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