android 请求权限封装,Android6.0优雅权限请求封装

Android优雅权限请求封装

先来看看不封装的情况下代码是如何写的,这里我们首先要判断是否存在特定的权限,如果存在才能进行特定操作,否则就要请求权限。最后请求的结果只能放在onRequestPermissionsResult中进行处理。这样写有几个不好的地方,第一就是你的判断逻辑是重复的,再者就是一旦有新的权限需要添加那么就需要修改onRequestPermissionsResult中的代码,根据面向对象基本原则中的开闭原则,我们尽量在需求发生改变后添加新的代码而不是修改原有的代码。

//请求权限

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {

callPhone();

} else {

//请求权限

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, CODE_CALL_PHONE);

}

//处理权限回调

@Override

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

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

if (requestCode == CODE_CALL_PHONE && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

callPhone();

}

}

以下就是封装后的权限调用,首先去请求权限,具体的结果会被回调到我们定义好的函数中,其函数需要使用注解进行标识,然后在onRequestPermissionsResult中直接交给我们封装好的PermissionHandler进行处理,它会帮我们完成函数的回调工作,省去了我们判断的逻辑代码。最重要的是不需要写逻辑验证了,也无需修改onRequestPermissionsResult中的内容,所有权限请求会被统一处理。

//请求权限

PermissionHandler.requestPermissions(this, CODE_CALL_PHONE, Manifest.permission.CALL_PHONE);

//---------------------------------------CALL_PHONE权限回调----------------------------

@HandlePermission(type = HandlePermission.SUCCESSFUL, requestCode = CODE_CALL_PHONE)//权限申请成功的回调

public void callPhone() {

Toast.makeText(this, "The request of CALL_PHONE is successful!", Toast.LENGTH_SHORT).show();

}

@HandlePermission(type = HandlePermission.FAILED, requestCode = CODE_CALL_PHONE)//权限申请失败的回调

private void callPhoneFailed() {

Toast.makeText(this, "The request of CALL_PHONE is failed!", Toast.LENGTH_SHORT).show();

}

//-------------------------------------------权限请求回调-------------------------

@Override

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

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

PermissionHandler.onRequestPermissionsResult(this, requestCode, permissions, grantResults);//处理结果

}

具体流程如下:

1460000020453607

最后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值