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


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


相关文章
|
Shell Android开发
解决Android的adb命令行报错Permission denied
解决Android的adb命令行报错Permission denied
1653 0
解决Android的adb命令行报错Permission denied
|
6月前
|
Android开发
Caused by: android.system.ErrnoException: android_getaddrinfo failed: EACCES (Permission denied)
Caused by: android.system.ErrnoException: android_getaddrinfo failed: EACCES (Permission denied)
72 3
|
5月前
|
安全 Unix 网络安全
Permission Denied原因及解决方法
Permission Denied原因及解决方法
1789 0
|
Android开发
Permission failure: android.permission.CAPTURE_AUDIO_OUTPUT 解决办法
Permission failure: android.permission.CAPTURE_AUDIO_OUTPUT 解决办法
399 0
|
Android开发
解决安卓的permission denied for this window type问题
解决安卓的permission denied for this window type问题
307 0
|
Java Android开发 安全
解决android.permission.WRITE_APN_SETTINGS
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/51555326 在ICS40以前的版本中,如果程序需要设置APN,只需要在AndroidManifest文件中声明这个权限即可。
1549 0
|
Android开发
【错误记录】前台进程报错 ( Permission Denial: startForeground requires android.permission.FOREGROUND_SERVICE )
【错误记录】前台进程报错 ( Permission Denial: startForeground requires android.permission.FOREGROUND_SERVICE )
610 0
【错误记录】前台进程报错 ( Permission Denial: startForeground requires android.permission.FOREGROUND_SERVICE )
|
开发工具
You need permission to perform this action access denied解决
这个界面,都遇到过吧。 解决办法一般是重获文件夹的OWNER权利。 但如何N多子文件夹,一个一个设置就头大了。 还有好有小工具。 http://www.howtogeek.com/howto/windows-vista/add-take-ownership-to-explorer-right-click-menu-in-vista/ 注册表之后,就可以右键得到子文件夹下的所有OWNER了。
1957 0
You need permission to perform this action access denied解决
|
Shell 虚拟化