uses-permission和permission区别及使用

简介: uses-permission和permission的区别permission定义权限uses-permission申请权限uses-permission(权限申请)介绍添加自定义权限,如:官方权限大全站内权限大全permission(自定义权限)介绍permission样例1.先使用定义一个权限2.provider组件设置权限3.其他应用(com.scc.ha)使用com.scc.cp包加权限的UserProviderpermission官方文档permission-group(自定义权限组)介绍permission-group样例

介绍


       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官方文档


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


相关文章
|
自然语言处理 算法 机器人
2025年热门智能客服机器人评测:哪款更好用?
2025年,智能客服机器人市场竞争激烈,功能日益强大。主要品牌如合力亿捷、阿里云、华为云、京东京小智和小米商城等纷纷推出具备精准语音识别、语义理解、多渠道接入等功能的产品,广泛应用于电商、金融、零售等领域,显著提升客服效率与客户满意度,降低企业运营成本。
1366 0
|
前端开发 Java 开发工具
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
1650 18
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
|
Java Kotlin
java调用kotlin代码编译报错“找不到符号”的问题
java调用kotlin代码编译报错“找不到符号”的问题
780 10
|
Web App开发 存储 关系型数据库
【教程】将自己的APP部署到阿里云
如何将APP部署在阿里云服务器上 如果将APP部署在阿里云服务器,可能会有一些操作需要我们来完成,下面的介绍里的说明大家可以参考下。 如何将APP部署在阿里云服务器上 随着移动通信设备终端的逐步流行,移动互联网在互联网交流中起着越来越大的作用,而移动互联网采用纯网站应用的部分相当之少,曲而代之的APP应用软件正以雨后春笋般的速度生发出来,例如说苹果IOS市场里的很多APP、谷歌安卓尔市场里的APP等。
10568 0
|
开发工具 Android开发
Flutter: Android SDK not found at this location,Android Studio not found at xxx
Flutter: Android SDK not found at this location,Android Studio not found at xxx
1013 2
|
Linux 编解码 Python
FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器
AV1是一种高效免费的视频编码标准,由AOM联盟制定,相比H.265压缩率提升约27%。各大流媒体平台倾向使用AV1。本文介绍了如何在Linux环境下为FFmpeg集成AV1编解码库libaom、libdav1d和libsvtav1。涉及下载源码、配置、编译和安装步骤,包括设置环境变量以启用这三个库。
1959 3
FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器
|
Kotlin
Kotlin中的When表达式:灵活、强大且直观的条件控制工具
Kotlin中的When表达式:灵活、强大且直观的条件控制工具
595 0
|
XML 安全 API
AndroidManifest.xml文件综合详解
AndroidManifest.xml文件综合详解
1227 2
|
Java 程序员
Java中实现动态性的原理和机制
Java中实现动态性的原理和机制
451 1
|
缓存 IDE 编译器
假如没有go install,编译会多痛苦?
假如没有go install,编译会多痛苦?
756 0