android 动态权限aop,Android — AOP 动态权限申请

初始化权限申请失败的监听

PermissionUtil.init(new PermissionUtil.PermissionGlobalConfigCallback() {

//直接申请权限

@Override public void shouldShowRational(String permission, int ration) {

...

}

//跳转到设置申请权限

@Override public void onPermissionReject(String permission, int reject) {

...

}

});

定义全局Dialog提示权限申请失败信息。

showRationaleDialog()是没有勾选不再提示被拒绝的Dialog。

showRejectDialog()是被勾选不再提示的Dialog,需要手动跳转到设置页开启权限。

//直接申请权限的Dialog

private void showRationaleDialog(int ration) {

new AlertDialog.Builder(this).setTitle("权限申请").setMessage(getString(ration)).setNegativeButton("取消", null).show();

}

//需要跳转到设置的Dialog

private void showRejectDialog(int reject) {

new AlertDialog.Builder(this).setTitle("权限申请")

.setMessage(getString(reject))

.setPositiveButton("跳转到设置页", new DialogInterface.OnClickListener() {

@Override public void onClick(DialogInterface dialog, int which) {

//手动跳转到设置同意权限

Intent intent = new Intent();

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

intent.setData(Uri.fromParts("package", BuildConfig.APPLICATION_ID, null));

startActivity(intent);

dialog.dismiss();

}

})

.setNegativeButton("取消", null)

.show();

}

在PermissionUtil中定义申请权限的失败时提示的常量值

public static final int READ_EXTERNAL_STORAGE_RATIONALE = 100;//允许应用程序从外部存储读取被拒绝

public static final int READ_EXTERNAL_STORAGE_REJECT = 1000;//允许应用程序从外部存储读取勾选不再提示被拒绝提

public static final int WRITE_EXTERNAL_STORAGE_RATIONALE = 101;//允许应用程序写入外部存储被拒绝

public static final int WRITE_EXTERNAL_STORAGE_REJECT = 1010;//允许应用程序写入外部存储勾选不再提示被拒绝提

在需要申请权限的方法上添加注解@Permission,这个方法只有所有权限同意后才会执行。

@Permission(

permissions = { Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE },

rationales = { PermissionUtil.READ_EXTERNAL_STORAGE_RATIONALE,PermissionUtil.WRITE_EXTERNAL_STORAGE_RATIONALE },

rejects = {PermissionUtil.READ_EXTERNAL_STORAGE_REJECT, PermissionUtil.WRITE_EXTERNAL_STORAGE_REJECT })

private void getStorage(){

//只有获取全部权限才会执行

Toast.makeText(this,"获取存储权限成功",Toast.LENGTH_LONG).show();

}

在PermissionUtil.init(PermissionGlobalConfigCallback)重写的两个方法会在权限被拒绝后返回@Permission中rationales和rejects传入的常量值,获取到常量值后可以通过常量值进行匹配提示权限申请失败的信息。

private void permissionInit() {

//初始化权限申请监听

PermissionUtil.init(new PermissionUtil.PermissionGlobalConfigCallback() {

//直接申请权限被拒绝

@Override public void shouldShowRational(String permission, int ration) {

//通过@Permission传入的ration判断要提示的信息,如果没有匹配到ration就使用默认的提示信息。

switch (ration) {

//获取写入权限失败

case PermissionUtil.WRITE_EXTERNAL_STORAGE_RATIONALE:

//显示Dialog提示权限被拒绝 图2

showRationaleDialog(R.string.write_external_storage_permission_rationale);

break;

case PermissionUtil.READ_EXTERNAL_STORAGE_RATIONALE:

showRationaleDialog(R.string.read_external_storage_permission_rationale);

break;

case PermissionUtil.CAMERA_RATIONALE:

showRationaleDialog(R.string.camera_permission_rationale);

break;

case PermissionUtil.READ_PHONE_STATE_RATIONALE:

showRationaleDialog(R.string.read_phone_state_permission_rationale);

break;

case PermissionUtil.CALL_PHONE_RATIONALE:

showRationaleDialog(R.string.call_phone_permission_rationale);

break;

default://如果没有设置RATIONALE就使用默认提示

showRationaleDialog(R.string.permission_rationale);

break;

}

}

//跳转到设置申请权限

@Override public void onPermissionReject(String permission, int reject) {

//通过@Permission传入的ration判断要提示的信息,如果没有匹配到reject就使用默认的提示信息。

switch (reject) {

//获取写入权限失败

case PermissionUtil.WRITE_EXTERNAL_STORAGE_REJECT:

//显示Dialog提示权限被拒绝 图3

showRejectDialog(R.string.write_external_storage_permission_reject);

break;

case PermissionUtil.READ_EXTERNAL_STORAGE_REJECT:

showRejectDialog(R.string.read_external_storage_permission_reject);

break;

case PermissionUtil.CAMERA_REJECT:

showRejectDialog(R.string.camera_permission_reject);

break;

case PermissionUtil.READ_PHONE_STATE_REJECT:

showRejectDialog(R.string.read_phone_state_permission_reject);

break;

case PermissionUtil.CALL_PHONE_REJECT:

showRejectDialog(R.string.call_phone_permission_reject);

break;

default://如果没有设置REJECT就使用默认提示

showRejectDialog(R.string.permission_reject);

break;

}

}

});

}

8229760a1e60a61a3330a439006eb18e.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值