Android Q的RecoverableSecurityException未授予访问权限
创始人
2024-08-15 03:00:05
0

在Android Q中,RecoverableSecurityException是一种新的异常类型,用于表示在Android应用程序中需要用户授予特定权限的情况。以下是解决Android Q RecoverableSecurityException未授予访问权限的示例代码:

private static final int REQUEST_PERMISSION_CODE = 1001;

public void checkPermission() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.YOUR_PERMISSION) == PackageManager.PERMISSION_DENIED) {
        if (shouldShowRequestPermissionRationale(Manifest.permission.YOUR_PERMISSION)) {
            try {
                // 请求授予权限,并捕获 RecoverableSecurityException 异常
                requestPermissions(new String[]{Manifest.permission.YOUR_PERMISSION}, REQUEST_PERMISSION_CODE);
            } catch (RecoverableSecurityException e) {
                // 捕获 RecoverableSecurityException 异常,并构建一个 PendingIntent
                PendingIntent recoveryIntent = e.getUserAction()
                        .getActionIntent();
                try {
                    // 启动请求权限的用户界面
                    startIntentSenderForResult(recoveryIntent.getIntentSender(), REQUEST_PERMISSION_CODE, null, 0, 0, 0);
                } catch (IntentSender.SendIntentException sendIntentException) {
                    sendIntentException.printStackTrace();
                }
            }
        } else {
            // 如果用户选择了“不再提醒”,则无法向用户解释为什么需要该权限,只能跳转到应用设置页面手动授予权限
            Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            intent.setData(Uri.fromParts("package", getPackageName(), null));
            startActivity(intent);
        }
    } else {
        // 已经授予该权限,可以进行后续操作
        // TODO: 在这里添加需要权限的代码逻辑
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == REQUEST_PERMISSION_CODE) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 用户授予了权限,可以进行后续操作
            // TODO: 在这里添加需要权限的代码逻辑
        } else {
            // 用户拒绝了权限请求,可以根据需要进行处理
        }
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_PERMISSION_CODE) {
        // 用户在权限请求界面进行了操作,可以根据需要进行处理
    }
}

以上代码中,YOUR_PERMISSION表示需要请求的权限,比如Manifest.permission.CAMERA。在checkPermission()方法中,首先检查权限是否已经被授予,如果没有授予,则会请求权限。如果用户之前拒绝了该权限请求,会抛出RecoverableSecurityException异常,然后通过getUserAction().getActionIntent()获取到一个带有权限请求界面的PendingIntent,然后使用startIntentSenderForResult()方法启动该界面。在onRequestPermissionsResult()方法中,处理用户对权限请求的结果。在onActivityResult()方法中,处理用户在权限请求界面的操作结果。

这是一个基本的示例,你可以根据自己的需求进行修改和扩展。记得在AndroidManifest.xml文件中声明所需的权限。

相关内容

热门资讯

一分钟揭秘!hh poker有... 一分钟揭秘!hh poker有没有辅助软件!果然真的是有辅助教程(有挂总结);1、hh poker有...
总算清楚!八闽掌上辅助软件!都... 总算清楚!八闽掌上辅助软件!都是存在有辅助挂(有挂规律)1、八闽掌上辅助软件公共底牌简单,八闽掌上辅...
一分钟揭秘!凑一桌游戏插件!其... 一分钟揭秘!凑一桌游戏插件!其实是真的有辅助插件(讲解有挂)所有人都在同一条线上,像星星一样排成一排...
每日必看推荐!卡五星辅助神器!... 每日必看推荐!卡五星辅助神器!总是存在有辅助攻略(有挂辅助)1、卡五星辅助神器公共底牌简单,卡五星辅...
教程攻略!卡五星辅助器!确实是... 教程攻略!卡五星辅助器!确实是真的有辅助攻略(讲解有挂)1、用户打开应用后不用登录就可以直接使用,点...
玩家必用!微乐陕西小程序破解器... 玩家必用!微乐陕西小程序破解器下载!好像真的是有辅助神器(有挂透视)1、下载好微乐陕西小程序破解器下...
科技通报!天天贵阳辅助工具!总... 科技通报!天天贵阳辅助工具!总是真的是有辅助软件(真的有挂)1、天天贵阳辅助工具公共底牌简单,天天贵...
昨日!天天微友辅助器!竟然是真... 昨日!天天微友辅助器!竟然是真的有辅助软件(证实有挂)1、游戏颠覆性的策略玩法,独创攻略技巧玩法,可...
查到实测辅助!瑞安玉海楼茶苑辅... 查到实测辅助!瑞安玉海楼茶苑辅助器!都是真的是有辅助挂(今日头条)1、完成瑞安玉海楼茶苑辅助器有辅助...
科技介绍!科乐填大坑破解游戏!... 科技介绍!科乐填大坑破解游戏!竟然确实有辅助插件(有挂解惑)在进入科乐填大坑破解游戏软件靠谱后,参与...