作者微信 bishe2022

代码功能演示视频在页面下方,请先观看;如需定制开发,联系页面右侧客服
Android权限管理之Permission权限机制及使用

Custom Tab

Android权限机制:

    权限是一种安全机制。Android权限主要用于限制应用程序内部某些具有限制性特性的功能使用以及应用程序之间的组件访问。

Android权限列表:

   Android权限列表可以参考这篇博客:android权限大全

Android权限使用:

1.)在 AndroidManifest.xml <manifest>标签内使用<uses-permission>声明使用某一个权限

<uses-permission android:name="string"/>

例如申请使用网络权限

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

如果特定的权限必须申明使用,如果没有申请使用就会报出Permission Denial错误,例如访问通讯录报出如下错误

Caused by: java.lang.SecurityException: Permission Denial: 
reading com.androintacts.ContactsProvider2 uri content://contacts/data/phones from pid=23763, 
uid=10036 requires android.permission.READ_CONTACTS

解决此类错误我们只需根据提示添加对应的权限即可

<uses-permission android:name="android.permission.READ_CONTACTS" />

2.)自定义权限permission

  虽然这种使用场景不多见,但是在有些特定的场景下出于安全考虑就需要自定义权限了,比如两个APP之间需要共享数据而采用了ContentProvider,此时我们需要对一个app访问另外一个app的数据时需要添加权限申请。自定义权限通过<permission>标签

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

关于android:protectionLevel:权限的等级

对于普通和危险级别的权限,我们称之为低级权限,应用申请即授予。其他两级权限,我们称之为高级权限或系统权限。当应用试图在没有权限的情况下做受限操作,应用将被系统杀掉以警示。系统应用可以使用任何权限。权限的声明者可无条件使用该权限。

根据上面的介绍我们实战一下自定义权限如下

 <permission
        android:name="personprovider.permission.read"
        android:description="@string/personprovider_permission_read_desstring"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/personprovider_permission_read_labestring"
        android:protectionLevel="normal"/>
    <permission
        android:name="personprovider.permission.write"
        android:description="@string/personprovider_permission_write_desstring"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/personprovider_permission_write_labestring"
        android:protectionLevel="normal"/>

3.)自定义权限组permission-group

    为了方便管理某一特定功能的权限,所以我会对权限进行分组,这时我们需要通过<permission-group>自定义一个权限组

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

 上面的权限组我们可以自定义为下面这种方式:

 <permission-group
        android:name="personprovider.permission-group"
        android:description="@string/personprovider_permission_group_desstring"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/personprovider_permission_group_labelstring"/>

    <permission
        android:name="personprovider.permission.read"
        android:description="@string/personprovider_permission_read_desstring"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/personprovider_permission_read_labestring"
        android:permissionGroup="personprovider.permission-group"
        android:protectionLevel="normal"/>
    <permission
        android:name="personprovider.permission.write"
        android:description="@string/personprovider_permission_write_desstring"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/personprovider_permission_write_labestring"
        android:permissionGroup="personprovider.permission-group"
        android:protectionLevel="normal"/>

 其他关于permission-tree这里就不介绍了,这个至今没有用到过,<permission-tree>是为一组permissions声明了一个namespace。

4.)使用自定义权限

申请权限

<uses-permission android:name="personprovider.permission.read"/>
   <uses-permission android:name="personprovider.permission.write"/>

在宿主上声明需要申请访问权限

<provider
    android:name=".PersonProvider"
    android:authorities="com.whoislcj.testsqlite.personprovider"
    android:enabled="true"
    android:exported="true"
    android:readPermission="personprovider.permission..read"
    android:writePermission="personprovider.permission..write"/>

总结:

   本篇大致了解了Android的权限permission以及如何使用和自定义权限,下篇将总结学一下如何解决Android 6.0的权限的适配问题。

 

  转载自:https://www.cnblogs.com/whoislcj/p/6072718.html

Home