<权限>

语法:
<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>