Android 申请权限结果返回处理

 

permissions{
    exclude  "android.permission.QUERY_ALL_PACKAGES"
}

 

manifestContent = manifestContent.replace('<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>', '')
<queries>
    <package android:name="com.facebook.katana" />
    <package android:name="com.tencent.mm" />
    <package android:name="com.tencent.mobileqq" />
    <package android:name="com.twitter.android" />
    <package android:name="com.tencent.mm" />

    <package android:name="com.baidu.BaiduMap" />
    <package android:name="com.autonavi.minimap" />
    <package android:name="com.google.android.apps.maps" />
    <package android:name="com.tencent.map" />

</queries>

 

 1、方法一

       private static final int PERMISSION_REQUEST_CODE = 1;
        private String[] mPermissions = {Manifest.permission.CAMERA};
        /**
         * 申请权限结果返回处理
         */
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            Log.i("lgq","onRequestPermissionsResult ....."+requestCode);
            if (requestCode == PERMISSION_REQUEST_CODE) {
                boolean isAllGranted = true;
                for (int grant : grantResults) {  // 判断是否所有的权限都已经授予了
                    Log.i("lgq","申请权限结果===="+grant);
                    if (grant != PackageManager.PERMISSION_GRANTED) {
                        isAllGranted = false;
                        break;
                    }
                }
                if (isAllGranted) { // 所有的权限都授予了
//                    startCamera();
                    Log.i("lgq","同样同意kaiqil ..onRequestPermissionsResult...");
                } else {// 提示需要权限的原因
                    Log.i("lgq","同样反对kaiqil ..onRequestPermissionsResult...");
                    AlertDialog.Builder builder = new AlertDialog.Builder(this);
                    builder.setMessage("拍照需要允许权限, 是否再次开启?反对")
                            .setTitle("提示")
                            .setPositiveButton("确认", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    ActivityCompat.requestPermissions(MainActivity.this, mPermissions, PERMISSION_REQUEST_CODE);
                                }
                            })
                            .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    dialog.dismiss();
                                    finish();
                                }
                            });
                    builder.create().show();
                }
            }
        }

当第一次点击禁止时:

2、方法二

1、添加依赖

//RxPermission权限申请
implementation 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar'
//RxBinding
implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0'

2、申请权限,处理申请结果

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
/**
 * 所有需要的权限类型
 */
private static final String[] PERMISSIONS = {Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA};
/**
 * 动态获取权限
 */
public void getPermission() {
    RxPermissions rxPermissions = new RxPermissions(MainActivity.this);
    rxPermissions.request(PERMISSIONS).subscribe(new Consumer<Boolean>() {
        @Override
        public void accept(Boolean granted) throws Exception {
            if(granted){
                //权限申请成功
                Toast.makeText(MainActivity.this,"cg",Toast.LENGTH_SHORT).show();
            }else{
                //权限申请不成功,弹窗提示退出
                Toast.makeText(MainActivity.this,"cg222",Toast.LENGTH_SHORT).show();
            }
        }
    });
}

 进阶方法:

implementation 'com.yanzhenjie:permission:1.1.2'
public void checkPermission(){
    //先判断是否有相机权限
    AndPermission.with(this)
            .requestCode(100)
            .permission(Permission.CAMERA)
            .callback(listener)
            .rationale(mRationaleListener)
            .start();
}


//用户拒绝一次权限后,再次申请时检测到已经申请过一次该权限了,允许开发者弹窗说明申请权限的目的,获取用户的同意后再申请权限,避免用户勾选不再提示,导致不能再次申请权限
private RationaleListener mRationaleListener = new RationaleListener() {
    @Override
    public void showRequestPermissionRationale(int requestCode, final Rationale rationale) {
        if(100==requestCode){
            Log.i("lgq","拒绝了。。。");
        }

    }
};

//相机权限监听
PermissionListener listener = new PermissionListener() {
    @Override
    public void onSucceed(int requestCode, @NonNull List<String> grantPermissions) {
        if(100==requestCode){//打开摄像头
            Log.i("lgq","同意了了。。。");
        }
    }

    @Override
    public void onFailed(int requestCode, @NonNull List<String> deniedPermissions) {

        if(100==requestCode){//相机
            AndPermission.defaultSettingDialog(MainActivity.this, 100)
                    .setTitle("权限申请失败")
                    .setMessage("需相机基本权限,否则您将无法正常使用,请在设置中授权")
                    .setPositiveButton("好,去设置")
                    .setNegativeButton("", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            return;
                        }
                    })
                    .show();
        }

    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值