最好用的Android权限申请库——EasyPermissions使用解析

一、前言:

从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授予。这种方式可以简化应用安装过程,它还让用户可以对应用的权限进行控制。例如,用户可以选择为相机应用提供相机访问权限,而不提供设备位置的访问权限。用户还可以随时进入设置界面对应用的权限进行修改。

系统权限分为两类:正常权限危险权限:如需了解详细信息,请参阅正常权限和危险权限

二、我们自己去申请权限

1、在AndroidManifest文件中添加需要权限

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

2、检查是否拥有该权限

ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED

3、申请该权限

ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS);

4、处理权限申请结果

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: {
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //授予了权限
            } else {
              //拒绝了权限
} return; } }}

三、使用EasyPermissions去申请权限

1、添加依赖

dependencies {
    implementation 'pub.devrel:easypermissions:1.2.0'
}
3、在AndroidManifest文件中添加需要的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3、复写onRequestPermissionsResult方法
@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        // 将返回结果转给EasyPermissions
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
    }

4、检查权限

String[] perms = {Manifest.permission.READ_EXTERNAL_STORAGE};
        if (EasyPermissions.hasPermissions(this, perms)) {
            // 已获取权限
            // ...

        } else {
            // 没有权限,现在去获取
            // ...
        }

5、申请权限

EasyPermissions.requestPermissions(this, "申请内存权限",
                    RC_READ_EXTERNAL_STORAGE, perms);

6、实现EasyPermissions.PermissionCallbacks接口,处理申请结果

扫描二维码关注公众号,回复: 2642518 查看本文章
@Override
    public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
        // 一些权限被授予
        Toast.makeText(this, "允许", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
        // 一些权限被禁止
        Toast.makeText(this, "禁止", Toast.LENGTH_SHORT).show();
    }
}

7、如果用户点击了拒绝,并勾选了不再询问

@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {

if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
    new AppSettingsDialog.Builder(this).build().show();
    //弹出个对话框 可以自定义
}
OK!到这里就搞定啦!对于一些对话框的自定义,大家可以自己去研究实现,总的来说,EasyPermissions帮我们简化了对权限申请结果的处理,使用简单方便,极力推荐大家使用!

猜你喜欢

转载自blog.csdn.net/k_bb_666/article/details/80668291