美文网首页
Android6.0 权限解读-SD卡写入权限(WRITE_EX

Android6.0 权限解读-SD卡写入权限(WRITE_EX

作者: 萤火虫叔叔 | 来源:发表于2017-12-26 09:01 被阅读120次

    读写权限(WRITE_EXTERNAL_STORAGE)在sdk 23之前,只需要在AndroidManifest.xml中添加响应权限即可。但是sdk 23以及大于23的版本时,需要在activity中动态授权。

    1. 用法

    在activity类中调用授权方法requestPermissions

    requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},123);
    

    调用这个方法之后,用户界面会弹出以下对话框


    image.png

    大家肯定很熟悉这个界面了,用户点击允许后,就可以正常读写sd卡了。

    当然,也需要在AndroidManifest.xml中添加权限。AndroidManifest.xml文件和activity中调用,两者缺一不可。

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

    如果只是想知道如何使用的童鞋,看到这就够了,下文请忽视~


    2. 方法解释

    requestPermissions接受两个参数,第一个参数类型是String[],String数组存的是需要授权的权限列表,第二个参数是requestCode,是一个自定义的请求码。这个请求码需要搭配onRequestPermissionsResult方法使用。


    image.png

    用户点击后,结果会通过这个方法通知开发者,开发者可以自定义处理逻辑。

    checkSelfPermission方式用于判断用户是否有权限,checkSelfPermission接受一个String类型参数——用户权限,这个参数Google官方已经有常量表示,例如:Manifest.permission.WRITE_EXTERNAL_STORAGE。
    返回值是int类型,其中-1表示用户没有获得此权限,0表示已经获得此权限,返回值也有常量表示,例如:PackageManager.PERMISSION_DENIED。

    3. 用户选择不同选项之后的,对应手机权限的变化

    在弹出对话框后,因为并不是所有的用户都会选择“允许”,根据用户的选择,app获得的权限也会不同。下面分析在用户的各种操作下,app权限的变化。本人亲测,直接上截图如下:


    image.png
    image.png
    image.png
    image.png
    image.png

    图片中说明列举了app权限和用户操作的关系。app权限中,“?”表示访问,"x"表示拒绝,“√”表示允许。下面在用表格简单说明:

    操作 没有动态授权前 允许 第1次拒绝 第n次拒绝(n>1)
    勾选“不再询问” 访问 允许 访问 拒绝
    不勾选“不再询问” 访问 允许 访问 访问

    注:当状态为允许或拒绝时,即使调用请求权限的方法requestPermissions,也不会弹出对话框。所以大家不用担心允许后还会弹出的问题,但是需要注意,如果用户勾选了“不在询问”后,也不会弹出,所以需要考虑这个因素并做处理。这里给出一个参数做法,用checkSelfPermission方法判断是否有权限,如果返回-1,即没有权限,那么先调用自定义弹出框,提示用户必须允许,才能使用xxx功能,如果这个功能确实是用户需要用到的,那用户就没有理由拒绝了。

    另外,不管在任何时候,任何状态下,用户都可以在设置中,找到应用权限设置,手动更改权限。

    4. 总结

    在sdk 23之前(不包括23),只需要在AndroidManifest.xml中添加响应权限即可。但是sdk 23以及大于23的版本,用户权限分成四种:
    normal:普通权限,只需在AndroidManifest.xml中声明即可调用
    dangerous :危险权限,需在AndroidManifest.xml中声明,并且在某一个activity中调用requestPermissions动态请求权限。
    signature :是指具有相同签名的App可以访问和共享此App。本文不作讨论。
    signatureOrSystem :是指系统image中App和具有相同签名的App可以访问和共享此App。本文不作讨论。

    requestPermissions用于动态请求权限,checkSelfPermission用于判断是否拥有权限。

    相关文章

      网友评论

          本文标题:Android6.0 权限解读-SD卡写入权限(WRITE_EX

          本文链接:https://www.haomeiwen.com/subject/cbbrgxtx.html