【Android】6.0+ 动态获取权限完美封装

本文介绍在Android应用中如何实现动态权限申请的过程。包括在AndroidManifest.xml中声明所需权限,使用数组存储权限列表,检查权限状态并请求未授权的权限。同时提供了一种处理权限请求结果的方法。

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

适用于单个及多个权限
在AndroidManifest.xml 文件中添加权限
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
2 创建数组用于添加所有要获取的权限
private String[] permissionArray = new String[]{android.Manifest.permission.CALL_PHONE,
            android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
            android.Manifest.permission.CAMERA};
3 检验是否已经获取权限
for (int i = 0; i < permissionArray.length; i++) {
                if (ContextCompat.checkSelfPermission(MainActivity.this, permissionArray[i]) != PackageManager.PERMISSION_GRANTED) {
                    //先判断有没有权限 ,没有就添加到列表中
                    permissionList.add(permissionArray[i]);
                }
            }
4 获取权限
if (permissionList.isEmpty()) {
            //未授予的权限为空,表示都授予了
            Toast.makeText(MainActivity.this, "已获取全部权限!", Toast.LENGTH_SHORT).show();
        } else {
            //请求权限方法
            String[] permissions = (String[]) permissionList.toArray(new String[permissionList.size()]);//将List转为数组
            ActivityCompat.requestPermissions(MainActivity.this, permissions, PERMISSION_CODE);
        }
5 重写方法相应请求
@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_CODE:
                for (int i = 0; i < grantResults.length; i++) {
                    if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
                        //判断是否勾选禁止后不再询问
                        boolean showRequestPermission = ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, permissions[i]);
                        if (showRequestPermission) {
                            // 禁止 & 未勾选禁止后不在访问
                            getPersion();//重新申请权限
                            return;
                        } else {
                            // 禁止 & 勾选禁止后不在访问
                            Toast.makeText(MainActivity.this, "已禁止权限!", Toast.LENGTH_SHORT).show();
                        }
                    } else {
                        //获取权限成功
                        Toast.makeText(MainActivity.this, "获取权限成功!", Toast.LENGTH_SHORT).show();
                    }
                }
                break;
            default:
                break;
        }
    }
6 总结
以上就是动态获取权限的精髓部分,通过在数组里添加想要获取的权限,可适用于单个或多个权限。

源码
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值