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);//处理结果
}

具体流程如下:

最后

Github:https://github.com/qylost/AndroidPermissionHandler

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值