动态权限申请封装在BaseActivity中

本文介绍了一个Android基类Activity,用于统一管理应用内的权限请求流程。该类提供了请求权限的方法,并处理了权限请求的结果,包括成功与失败的情况。同时,还实现了权限拒绝后的提示对话框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class BaseActivity extends AppCompatActivity {

    private int mRequestCode = 12;
    private String mReason;
    private String mPermission;


    // 申请权限
    protected void requestPermission(String permission, String reason) {
        mReason = reason;
        mPermission = permission;
        // 判断自身是否拥有此权限
        if (PackageManager.PERMISSION_DENIED == checkSelfPermission(permission)) {
            // 如果没有,就去申请权限
            requestPermissions(new String[]{permission}, mRequestCode);
        } else {
            // 如果有,则返回给子类调用
            onPermissionResult(true);
        }
    }

    // 系统activity回调的权限申请结果
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == mRequestCode && grantResults[0] != PackageManager.PERMISSION_DENIED) {
            // 权限申请成功
            onPermissionResult(true);
        } else {
            // 权限申请失败,判断是否需要弹窗解释原因
            if (shouldShowRequestPermissionRationale(permissions[0])) {
                // 如果需要弹窗,则弹窗解释原因
                showReasonDialog();
            } else {
                // 否则,告诉子类权限申请失败
                onPermissionResult(false);
            }
        }
    }

    // 展示给用户说明权限申请原因
    private fun showReasonDialog() {
        AlertDialog.Builder(this)
                .setMessage(mReason)
                .setNegativeButton("取消", {dialog, which ->
                        dialog.dismiss()
                        onPermissionResult(false)
                }).setPositiveButton("确定", {dialog, which ->
                dialog.dismiss()
                requestPermissions(arrayOf < String > (mPermission), mRequestCode)
        }).create().show()
    }

    // 需要子类实现的权限申请结果,不写成接口是因为并不是所有的activity都需要申请权限    
    protected void onPermissionResult(boolean result) {
        
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值