android 权限相关业务逻辑

requestCode 和 requestPermissions可以做一个对应 如:

public static final int CODE_RECORD_AUDIO = 0;
    final int CODE_READ_PHONE_STATE = 1;
    final int CODE_CAMERA = 2;
    
    public static final String PERMISSION_RECORD_AUDIO=Manifest.permission.RECORD_AUDIO;
    public static final String PERMISSION_READ_PHONE_STATE=Manifest.permission.READ_PHONE_STATE;
    public static final String PERMISSION_CAMERA = Manifest.permission.CAMERA;

    public static final List<String> requestPermissions = Arrays.asList(
            PERMISSION_RECORD_AUDIO,
            PERMISSION_READ_PHONE_STATE,
            PERMISSION_CAMERA,);

    public static final String[] permissionWords = {
            "录音权限",
            "读取手机状态权限",
            "相机权限"
    };

这样做的好处是

1.外部调用不用再查具体权限字段是什么,直接凭感觉找到code

2.此requestCode将来可用做requestPermissions:

//申请权限
ActivityCompat.requestPermissions(activity, new String[]{requestPermission}, requestCode);

//回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (grantResults != null && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            //do something
        }
    }

在permissionUtils.java中申请权限逻辑


        final String requestPermission = requestPermissions.get(requestCode);
        int checkSelfPermission;
        try {
            checkSelfPermission = ActivityCompat.checkSelfPermission(activity, requestPermission);
        } catch (RuntimeException e) {
            Toast.makeText(activity, "请在设置中打开" + permissionWords[requestCode], Toast.LENGTH_SHORT)
                 .show();
            Log.e(TAG, "RuntimeException:" + e.getMessage());
            return;
        }

        if (checkSelfPermission != PackageManager.PERMISSION_GRANTED) {
            permissionGrant.onPermissionFailed(requestCode);
            if (Build.VERSION.SDK_INT < 23) {
                //打开自定义的弹框或设置中设置 openSettingActivity(activity, permissionWords[requestCode]);
                return;
            }
            Log.i(TAG, "ActivityCompat.checkSelfPermission != PackageManager.PERMISSION_GRANTED");
            ActivityCompat.requestPermissions(activity, new String[]{requestPermission}, requestCode);
        } else {
            Log.d(TAG, "ActivityCompat.checkSelfPermission ==== PackageManager.PERMISSION_GRANTED");
            permissionGrant.onPermissionGranted(requestCode);
        }
    

设置权限的intent过滤:

 Intent intent = new Intent();
                intent.setAction(Settings.ACTION_SETTINGS);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
                activity.startActivity(intent);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值