美文网首页
Android 关于动态申请权限

Android 关于动态申请权限

作者: Eva_Gao | 来源:发表于2019-12-18 10:17 被阅读0次

第一种方式:引入三方库,利用第三方申请权限

1.引入三方库:

api'com.tbruyelle.rxpermissions2:rxpermissions:0.9.3@aar'

2.调用(当然你需要什么权限就申请什么权限)

private void requestPermissions() {

RxPermissions rxPermission =new RxPermissions(MainActivity.this);

    rxPermission

.requestEach(

Manifest.permission.WRITE_EXTERNAL_STORAGE,

                    Manifest.permission.READ_CALENDAR,

                    Manifest.permission.READ_CALL_LOG,

                    Manifest.permission.READ_CONTACTS,

                    Manifest.permission.CAMERA

            )

.subscribe(new Consumer() {

@Override

                public void accept(Permission permission)throws Exception {

if (permission.granted) {

// 用户已经同意该权限

                        Log.d(TAG, permission.name +" is granted.");

                    }else if (permission.shouldShowRequestPermissionRationale) {

// 用户拒绝了该权限,没有选中『不再询问』(Never ask again),那么下次再次启动时,还会提示请求权限的对话框

                        Log.d(TAG, permission.name +" is denied. More info should be provided.");

                    }else {

// 用户拒绝了该权限,并且选中『不再询问』

                        Log.d(TAG, permission.name +" is denied.");

                    }

}

});

}

第二种方式自己申请权限,代码如下

1.先定义你需要申请的权限数组

private static final int REQUEST_EXTERNAL_STORAGE =1;

private static String[]PERMISSIONS_STORAGE = {

"android.permission.READ_EXTERNAL_STORAGE",

        "android.permission.WRITE_EXTERNAL_STORAGE",

        "android.permission.READ_PHONE_STATE"};

2.开始申请权限(6.0以上需要动态)

private void checkPermission() {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

try {

//检测是否有写的权限

            int permission = ActivityCompat.checkSelfPermission(this,

                    "android.permission.READ_PHONE_STATE");

            if (permission != PackageManager.PERMISSION_GRANTED) {

// 没有写的权限,去申请写的权限,会弹出对话框

                ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE);

            }

}catch (Exception e) {

e.printStackTrace();

        }

}

}

3.处理权限回调方法

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

switch (requestCode) {

case 1: {

// 授权被允许

            if (grantResults.length >0

                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

Log.e("-------->", "授权请求被允许");

            }else {

Toast.makeText(this, "拒绝权限将无法使用程序", Toast.LENGTH_SHORT).show();

                finish();

                Log.e("-------->", "授权请求被拒绝");

            }

}

}

}

相关文章

网友评论

      本文标题:Android 关于动态申请权限

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