<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" 默认值。一种低风险权限,允许请求应用程序访问隔离的应用程序级功能,对其他应用程序、系统或用户的影响最小。系统会在安装时自动授予请求应用程序此类权限,无需征得用户的明确批准,但用户始终可以选择在安装前查看这些权限。
“危险” 一种高风险权限,允许请求应用程序访问私有用户数据或控制设备,这可能会对用户产生负面影响。由于此类权限会带来潜在风险,系统可能不会自动将其授予请求应用程序。例如,应用程序请求的任何危险权限都可能会显示给用户,并在继续操作前需要确认,或者可能会采取其他方法来避免用户自动授予使用此类功能的权限。
“签名” 只有当请求应用程序与声明该权限的应用程序使用相同的证书签名时,系统才会授予此权限。如果证书匹配,系统会自动授予权限,无需通知用户或征得用户的明确批准。
“已知签名者” 只有当请求应用程序使用允许的证书签名时,系统才会授予此权限。如果请求者的证书在列表中,系统会自动授予权限,无需通知用户或征得用户的明确批准。
“签名或系统”

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

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

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

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