uses-permission和permission区别及使用

前言

uses-permission和permission的区别

        permission定义权限

        uses-permission申请权限

uses-permission(权限申请)

介绍

        Android 应用必须请求访问敏感用户数据(例如联系人和短信)或某些系统功能(例如相机和互联网访问)的权限。每个权限都由一个唯一的标签标识。例如,需要发送 SMS 消息和访问互联网的应用程序必须在清单中包含以下内容:

<manifest ... >
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>

添加自定义权限,如:

<manifest ... >
    <uses-permission android:name="com.scc.userprovider.permissionread"/>
<uses-permission android:name="com.scc.userprovider.permissionwrite"/>
    ...
</manifest>

        权限不仅用于请求系统功能。你还可以限制其他应用与你的应用组件交互的方式。如何自定义权限请往下看。

官方权限大全

站内权限大全

permission(自定义权限)

介绍

        你的应用可以使用 声明安全权限,可用于限制对此应用或其他应用的特定组件或功能的访问,例如 ContentProvider。

<permission 
    android:description="string resource"
    android:icon="drawable resource"
    android:label="string resource"
    android:name="string"
    android:permissionGroup="string"
    android:protectionLevel=["normal" | "dangerous" |
                           "signature" | ...] />

android:description:权限说明。此属性必须设置为对字符串资源的引用

例如:

  <permission 
    android:description="哈哈可读说明"
    .../>

报错:AAPT: error: '哈哈可读说明' is incompatible with attribute description (attr) reference.

  • android:icon:权限的图标。

  • android:label向用户显示的权限的名称。可将此标签直接设置为原始字符串。不过,当准备好发布应用时,应将标签设置为对字符串资源的引用,以便可以像界面中的其他字符串一样进行本地化。

  • android:name:用于引用权限的名称。(例如,在元素和应用组件的 permission 属性中)

  • android:permissionGroup:将此权限分配给一个组。如果未设置此属性,则此权限不会属于某个组。

  • android:protectionLevel: 说明权限中隐含的潜在风险,并指示系统在确定是否将权限授予请求授权的应用时应遵循的流程。下表列出了所有基本权限类型。

    • normal:默认值。具有较低风险的权限。系统会自动向在安装时请求授权的应用授予此类权限,无需征得用户的明确许可(但用户始终可以选择在安装之前查看这些权限)。

    • dangerous:具有较高风险的权限。由于此类权限会带来潜在风险,因此系统可能不会自动向请求授权的应用授予此类权限

    • signature 只有在请求授权的应用使用与声明权限的应用相同的证书进行签名时系统才会授予的权限。如果证书匹配,则系统会在不通知用户或征得用户明确许可的情况下自动授予权限。

    • signatureOrSystem不要使用此选项,因为 signature 保护级别应足以满足大多数需求,无论应用安装在何处,该保护级别都能正常发挥作用。signatureOrSystem权限适用于以下特殊情况:多个供应商将应用内置到一个系统映像中,并且需要明确共享特定功能,因为这些功能是一起构建的。

permission样例

应用Demo(com.scc.cp)和其他应用(com.scc.ha)

1.先使用定义一个权限

    <permission android:description="@string/permission_description"
        android:icon="@mipmap/ic_launcher"
        android:label="permissionLabel"
        android:name="com.scc.userprovider.permission"
        android:protectionLevel="normal"/>

2.provider组件设置权限

    <provider
        android:authorities="com.scc.userprovider"
        android:name="com.scc.cp.UserProvider"
        android:permission="com.scc.userprovider.permission"
        android:exported="true"/>

3.其他应用(com.scc.ha)使用com.scc.cp包加权限的UserProvider

        啥也不做直接操作:

Process: com.scc.ha, PID: 14922
java.lang.SecurityException: Permission Denial: opening provider com.scc.cp.UserProvider from 
ProcessRecord{5d7db58 14922:com.scc.ha/u0a889} (pid=14922, uid=10889) 
requires com.scc.userprovider.permission or com.scc.userprovider.permission

        报错显示缺少com.scc.userprovider.permission权限

         缺少权限,咱就申请权限:

<uses-permission android:name="com.scc.userprovider.permission"/>

        然后就可以美滋滋的使用com.scc.cp包中的provider数据了。

permission官方文档

permission-group(自定义权限组)

介绍

<permission-group 
    android:description="string resource"
    android:icon="drawable resource"
    android:label="string resource"
    android:name="string" />

        声明相关权限的逻辑分组的名称。各个权限通过 元素的 permissionGroup 属性加入权限组中。权限组中的成员一起显示在界面中。

        注意此元素并不声明权限本身,而只声明可以放置权限的类别。

        permission-group属性介绍跟permission类似,就不多做介绍了。

permission-group样例

应用Demo(com.scc.cp)和其他应用(com.scc.ha)

1.先使用定义一个权限组

    <permission-group
        android:name="com.scc.userprovider.permissiongroup"
        android:description="@string/userprovider_permission_group_description"
        android:icon="@mipmap/ic_launcher"
        android:label="GroupLabel"/>

2.添加组员

    <permission
        android:name="com.scc.userprovider.permissionread"
        android:description="@string/userprovider_permission_read_description"
        android:icon="@mipmap/ic_launcher"
        android:label="readLabel"
        android:permissionGroup="com.scc.userprovider.permissiongroup"
        android:protectionLevel="normal"/>
    <permission
        android:name="com.scc.userprovider.permissionwrite"
        android:description="@string/userprovider_permission_write_description"
        android:icon="@mipmap/ic_launcher"
        android:label="writeLabel"
        android:permissionGroup="com.scc.userprovider.permissiongroup"
        android:protectionLevel="normal"/>

3.provider组件设置权限

  <provider
    android:authorities="com.scc.userprovider"
    android:name="com.scc.cp.UserProvider"
    android:writePermission="com.scc.userprovider.permissionwrite"
    android:readPermission="com.scc.userprovider.permissionread"
    android:exported="true"/>

4.其他应用(com.scc.ha)使用com.scc.cp包加权限的UserProvider

        啥也不做直接操作同样会报上面缺少权限的错误。

        咱们先申请权限

<uses-permission android:name="com.scc.userprovider.permissionread"/>
<uses-permission android:name="com.scc.userprovider.permissionwrite"/>

        然后就可以美滋滋的使用com.scc.cp包中的provider数据了。

permission-group官方文档

齐活,哪里有问题,欢迎指导。

评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅次

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值