博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EasyPermissions
阅读量:4074 次
发布时间:2019-05-25

本文共 3848 字,大约阅读时间需要 12 分钟。

Easypermissions简化了Android M的运行时权限的申请、结果处理

1.地址

Android M对权限系统进行了改变
Android M之前所需权限只需要在AndroidManifest中申请即可。但更新Android M系统后,部分“Dangerous Permission”需要在运行时询问申请

2.Android 6.0之前

在Android6.0 sdk api level 23之前只需要AndroidManifest.xml中申请所需的权限,读写SD卡为例

private void writeFile(File fileName, String info){        try {            OutputStream fout = new BufferedOutputStream(                    new FileOutputStream(fileName));            byte[] bytes = info.getBytes();            fout.write(bytes);            fout.close();        } catch (Exception e) {           e.printStackTrace();        }    }    private String readFile(File file)    {        String Strtmp = null;        try {            InputStream fin = new BufferedInputStream(new FileInputStream(file));            int filelength = fin.available();            byte[] bytes = new byte[filelength];            fin.read(bytes);            Strtmp = new String(bytes);            return Strtmp;        } catch (Exception err)        {            return "";        }    }

这里写图片描述

3.Android 6.0之后

在Android7.0上测试,没有做修改,会出现Warr并且写文件失败

01-01 01:11:28.127  3764  3764 W System.err: java.io.FileNotFoundException: /mnt/sdcard/test (Permission denied)01-01 01:11:28.127  3764  3764 W System.err:    at java.io.FileOutputStream.open(Native Method)01-01 01:11:28.127  3764  3764 W System.err:    at java.io.FileOutputStream.
(FileOutputStream.java:221)01-01 01:11:28.127 3764 3764 W System.err: at java.io.FileOutputStream.
(FileOutputStream.java:169)01-01 01:11:28.127 3764 3764 W System.err: at com.bshui.easypermissiondemo.MainActivity.writeFile(MainActivity.java:61)

解决:检查运行时权限—>申请权限—>接收权限处理结果

int checkSelfPermission(String permission) 用来检测应用是否已经具有权限    void requestPermissions(String[] permissions, int requestCode) 进行请求单个或多个权限    void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) 用户对请求作出响应后的回调
//1.检查权限if(!(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)                == PackageManager.PERMISSION_GRANTED)){            Toast.makeText(getApplicationContext(),"需要动态申请sd卡写权限",                    Toast.LENGTH_LONG).show();            requestSdWritePermission();        }//2.申请权限    private static final int REQUEST_PERMISSION_SD_WRITE_CODE = 1;    private void requestSdWritePermission(){        requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},                REQUEST_PERMISSION_SD_WRITE_CODE);    }//3.处理申请权限结果    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        if(requestCode == REQUEST_PERMISSION_SD_WRITE_CODE){            Toast.makeText(getApplicationContext(),"申请sd卡写权限成功",                    Toast.LENGTH_LONG).show();        }    }

这里写图片描述

申请成功后可以对sd卡进行读写了

4.使用EasyPermissions处理权限

1)引用库

dependencies {    implementation 'pub.devrel:easypermissions:1.2.0'}

2)检查权限

//1.检查权限,把所要检查的所有权限放在perms数组里private static final int REQUEST_PERMISSION_SD_WRITE_CODE = 1;        String[] perms = {Manifest.permission.WRITE_EXTERNAL_STORAGE};if(EasyPermissions.hasPermissions(this,perms)) {            //如果有权限,正常流程        } else{            //如果没有权限,现在申请                EasyPermissions.requestPermissions(this,                        "写文件需要写文sd卡权限",                        REQUEST_PERMISSION_SD_WRITE_CODE,                        perms);            }

3)处理结果

//处理申请权限结果    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);    EasyPermissions.onRequestPermissionsResult(requestCode,            permissions,grantResults,this);    }

总结:对于一个应用程序需要多个权限用EasyPermissions还是比较方便的

你可能感兴趣的文章
HOLOLENS的DEVICE POTAL连接和安装
查看>>
HOLOLENS如何调节屏幕亮度和音量?
查看>>
HOLOTOOLKIT的使用
查看>>
Unity Camera的两种模式
查看>>
Collider Collision 区别
查看>>
博客推荐
查看>>
UNITY3D中涉及的一些数学知识
查看>>
Unity3D粒子系统 合集
查看>>
UNITY在VS中调试
查看>>
Unity StartCoroutine 和 yield return 深入研究
查看>>
Unity-Animator深入系列
查看>>
UNITY3D的变量初始化问题
查看>>
UNITY3D单词学习 speed和velocity的区别
查看>>
Unity3D中的线性插值Lerp()函数解析
查看>>
pitch yaw roll 的区别
查看>>
什么是UV?
查看>>
手机开启HDR后拍照有什么不同?
查看>>
图文详解Unity3D中Material的Tiling和Offset是怎么回事
查看>>
voxel 与 pixel
查看>>
vector3.forward和transform.forward的区别!
查看>>