uses-permission和permission区别及使用

举报
帅次 发表于 2021/12/23 00:02:27 2021/12/23
【摘要】 前言 uses-permission和permission的区别         permission定义权限         uses-permission申请权限 u...

前言

uses-permission和permission的区别

        permission定义权限

        uses-permission申请权限

uses-permission(权限申请)

介绍

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


  
  1. <manifest ... >
  2.     <uses-permission android:name="android.permission.SEND_SMS"/>
  3.     <uses-permission android:name="android.permission.INTERNET" />
  4.     ...
  5. </manifest>

添加自定义权限,如:


  
  1. <manifest ... >
  2.     <uses-permission android:name="com.scc.userprovider.permissionread"/>
  3. <uses-permission android:name="com.scc.userprovider.permissionwrite"/>
  4.     ...
  5. </manifest>

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

官方权限大全

站内权限大全

permission(自定义权限)

介绍

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


  
  1. <permission 
  2.     android:description="string resource"
  3.     android:icon="drawable resource"
  4.     android:label="string resource"
  5.     android:name="string"
  6.     android:permissionGroup="string"
  7.     android:protectionLevel=["normal" | "dangerous" |
  8.                            "signature" | ...] />

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

例如:


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

报错: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.先使用定义一个权限


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

2.provider组件设置权限


  
  1.     <provider
  2.         android:authorities="com.scc.userprovider"
  3.         android:name="com.scc.cp.UserProvider"
  4.         android:permission="com.scc.userprovider.permission"
  5.         android:exported="true"/>

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

        啥也不做直接操作:


  
  1. Process: com.scc.ha, PID: 14922
  2. java.lang.SecurityException: Permission Denial: opening provider com.scc.cp.UserProvider from 
  3. ProcessRecord{5d7db58 14922:com.scc.ha/u0a889} (pid=14922, uid=10889) 
  4. 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(自定义权限组)

介绍


  
  1. <permission-group 
  2.     android:description="string resource"
  3.     android:icon="drawable resource"
  4.     android:label="string resource"
  5.     android:name="string" />

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

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

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

permission-group样例

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

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


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

2.添加组员


  
  1.     <permission
  2.         android:name="com.scc.userprovider.permissionread"
  3.         android:description="@string/userprovider_permission_read_description"
  4.         android:icon="@mipmap/ic_launcher"
  5.         android:label="readLabel"
  6.         android:permissionGroup="com.scc.userprovider.permissiongroup"
  7.         android:protectionLevel="normal"/>
  8.     <permission
  9.         android:name="com.scc.userprovider.permissionwrite"
  10.         android:description="@string/userprovider_permission_write_description"
  11.         android:icon="@mipmap/ic_launcher"
  12.         android:label="writeLabel"
  13.         android:permissionGroup="com.scc.userprovider.permissiongroup"
  14.         android:protectionLevel="normal"/>

3.provider组件设置权限


  
  1.   <provider
  2.     android:authorities="com.scc.userprovider"
  3.     android:name="com.scc.cp.UserProvider"
  4.     android:writePermission="com.scc.userprovider.permissionwrite"
  5.     android:readPermission="com.scc.userprovider.permissionread"
  6.     android:exported="true"/>

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

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

        咱们先申请权限


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

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

permission-group官方文档

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

文章来源: shuaici.blog.csdn.net,作者:帅次,版权归原作者所有,如需转载,请联系作者。

原文链接:shuaici.blog.csdn.net/article/details/119951397

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。