android 权限常见错误,onRequestPermissionsResult回调不执行问题

news2024/11/26 4:24:28

今天在调试一个fragment时,申请到权限,然后在权限回调里面做相应的dialog提示用户,但是发现一直无弹窗。

话不多说,直接上问题代码

    private void testRxPermissions() {
        ActivityCompat.requestPermissions(this.getActivity(), new String[]{Manifest.permission.CAMERA}, 100);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @androidx.annotation.NonNull String[] permissions, @androidx.annotation.NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        //TODO:dialog展示相关代码
    }

问题现象: dialog展示相关代码一直未执行,最后打了断点,发现onRequestPermissionsResult函数根本没有进来

问题原因:

问题根因在于,我们调用的是ActivityCompat.requestPermissions,而点进去看一下这个方法的源码

在这里插入图片描述

大家知道原因了吧,所以回调会直接到activity的onRequestPermissionsResult方法中。

问题解决方法:

既然知道了原因,那么解决方法就对应的有两个

解决方法1

最直接的方法,就是统一在fragment所属的activity onRequestPermissionsResult中,处理权限申请回调

解决方法2

既然知道了问题原因,那么我们也可以直接调用fragment中的requestPermissions方法,保证onRequestPermissionsResult回调在fragment中

private void testRxPermissions() {
        requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 100);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @androidx.annotation.NonNull String[] permissions, @androidx.annotation.NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

解决办法3在这里插入图片描述

仔细看fragment api注释,发现已经requestPermissions废弃,官方建议使用registerForActivityResult

Deprecated
use registerForActivityResult(ActivityResultContract, ActivityResultCallback) passing in a androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions object for the ActivityResultContract and handling the result in the callback.
官方建议使用registerForActivityResult

 ActivityResultLauncher activityResultLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), new ActivityResultCallback<Boolean>() {
            @Override
            public void onActivityResult(Boolean isGranted) {
                if (isGranted) {
                    //做后续操作
                } else {
                    // 权限被拒绝就要提醒
                }

            }
        });
        activityResultLauncher.launch(Manifest.permission.CAMERA);

总结

建议使用方法3,毕竟是官方建议的,但是如果简单而且防止出错的话,方法1的确是最简单的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/116025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ajax学习

1.什么是ajax&#xff08;局部刷新&#xff09; 2.原生ajax WebServlet("/ajaxServlet") public class AjaxServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException…

基于uniapp的药品商城外卖小程序

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

利用OpenCV的函数warpPerspective()作图像的透视变换

图像的透视变换是指按照物体的成像投影规律进行变换。通过透视变换可以将图像投影到新的成像平面上。 图像的透视变换通常用来解决相机的视线与物体所在平面不垂直的问题。 比如&#xff0c;下面这幅图中&#xff0c;如果相机的视线与正方形是垂直的&#xff0c;那么应该是下面…

改bug神器,ChatGPT分分钟扫描,真香!

最近ChatGPT大火&#xff0c;各大论坛中都会出现它的关键词。 机器和人对话本不是什么新鲜事&#xff0c;而ChatGPT上线仅5天&#xff0c;用户数量就超百万&#xff0c;之所以能在短时间吸引到这么多用户尝鲜&#xff0c;是因为它比“人工智障”的AI前辈们聪明多了~ 玩了一会…

T900------900MHz跳频电台核心模块(兼容P900,远距离)

&#xff08;咨询申请 - 上海皕科电子有限公司--专注物联网注册后&#xff0c;可以获取详细数据手册和评估工具&#xff09; 目录 1 概述 2 性能特点 3 硬件说明 4 整机介绍 1 概述 T900 模块使用点对点&#xff08;PP&#xff09;、点对多点&#xff08;PMP&#xff0…

浅析几种常见的诊断数据库——ARXML

分别回忆了常见诊断数据库CDD、ODX文件格式,今天主要介绍另外一种常用的数据库文件格式——ARXML(主要应用于AUTOSAR流程数据交互) AUTOSAR诊断提取模板——ARXML AUTOSAR是汽车开放系统架构,该架构有利于车辆电子系统软件的交互与更新,并为高效管理复杂的车辆电子和软件…

Linux 管理联网 配置静态解析 域名解析

问题引入 # 我们平时在网址栏访问网址的时候&#xff0c; 比如 &#xff1a; 访问 百度 的时候&#xff0c;是怎样访问的 &#xff1f; >>> 那是不是就是在 地址栏 我们输入 www.baidu.com 随后就跳转到 百度的页面去了~&#xff01; 但实际是 &#xff1a; >&g…

MySQL-事务

文章目录事务&#xff08;Transaction&#xff09;为什么会出现事务ACID四大属性事务提交的方式事务基本操作&#xff1a;事务隔离级别&#xff08;MVCC&#xff09;隔离级别&#xff1a;如何理解隔离性&#xff1f;为何要存在隔离级别&#xff1f;一致性读读并发写写并发读写并…

机器学习基础概念篇 | 10大经典算法

“数据算法模型”。 面对具体的问题&#xff0c;选择切合问题的模型进行求解十分重要。有经验的数据科学家根据日常算法的积累&#xff0c;往往能在最短时间内选择更适合该问题的算法&#xff0c;因此构建的模型往往更准确高效。本文归纳了机器学习的10大算法&#xff0c;并分别…

FIX:WIN11客户机完美支持 Eyeshot Fem 最新Crack

概述 将 CAD 功能添加到您的 .NET 应用程序 Eyeshot 是一个基于.NET Framework 的CAD 控件。它允许开发人员快速将 CAD 功能添加到 WinForms 和 WPF 应用程序。Eyeshot 提供了从头开始构建几何体、使用有限元方法对其进行分析并在其上生成刀具路径的工具。还可以使用 CAD 交换…

Ubuntu安装Tango教程

文章目录环境步骤其他指令参考环境 虚拟机&#xff1a;VMware Ubuntun&#xff1a;20.04LTS Tango&#xff1a;9.3.4 步骤 为tango-controls安装: sudo apt-get install g openjdk-8-jdk mariadb-server libmariadb-dev zlib1g-dev libomniorb4-dev libcos4-dev omniidl li…

RPM包制作

如何准备编译制作一个RPM包 编译制作RPM包&#xff0c;主要包含如下几个步骤: 规划好制作一个什么样的RPM包 搜集相关的软件和压缩包、补丁 创建SPEC文件 制作RPM包 测试验证RPM包规划好制作一个什么样的RPM包 一般情况下&#xff0c;有如下几种情况会需要制作RPM包 应用程…

MySQL中Innodb 存储引擎的Buffer Pool详解

MYSQL的InnoDB存储引擎为了提高性能&#xff0c;减少磁盘IO&#xff0c;而设计了缓冲池&#xff08;Buffer Pool&#xff09;。结构图如下&#xff1a; Buffer Pool 什么是Buffer Pool Buffer Pool即缓冲池&#xff08;简称BP&#xff09;&#xff0c;BP以Page页为单位&#x…

详解Lombok 的使用,工作原理,优缺点

文章目录Lombok概述Lombok的安装Lombok的具体使用Lombok工作原理Lombok的优缺点Lombok概述 相信大家对于lombok应该都不陌生&#xff0c;Lombok是一个可以大幅减少java模板代码的工具。通俗一点来说&#xff0c;通过添加注解的方式&#xff0c;不需要为类编写常用几个方法&…

stm32f407VET6 系统学习 day05 复位, 时钟,看门狗, 滴答定时器

1. 复位 1.三种类型的复位&#xff0c;系统复位&#xff0c;电源复位&#xff0c;备份复位; 2.复位作用:让程序从头开始运行&#xff0c;恢复到一开始运行的状态 2.stm32 时钟源 1. 5个是时钟源 1.HSI高速内部时钟:RC振荡器&#xff0c;频率为16MHz&#xff0c;精度不高。可…

npm中dependencies与devDependencies的区别

这个问题的出现是我下载npm包中的依赖文件安装错地方了&#xff0c;导致上线项目有问题&#xff0c;顺便一起来看看它们的区别。 一、前言 说白了就是当初学的时候太菜&#xff0c;没注意到它们的区别&#xff0c;也没去查明白。哈哈哈 二、dependencies与devDependencies的区别…

【人工智能与机器学习】——深度学习(学习笔记)

&#x1f4d6; 前言&#xff1a;长期以来&#xff0c;图像识别技术一直是人工智能研究领域的难题。近年来&#xff0c;随着算力的提升、物联网与大数据的出现、机器学习算法的快速发展&#xff0c;科学家们终于找到了有效的方法来实现图像识别&#xff0c;这就是基于人工神经网…

【OpenCV-Python】教程:8-2 图像修复 Image Inpainting

OpenCV Python 图像修复 【目标】 去除小噪声和笔画等&#xff1b; 【理论】 大多数人家里都会有一些旧照片&#xff0c;上面有一些黑点&#xff0c;一些笔画等。你想过把它修复回来吗?我们不能简单地在油漆工具中删除它们&#xff0c;因为它只会用白色结构取代黑色结构&a…

代码随想录拓展day4 143.重排链表;141. 环形链表;面试题 02.07. 链表相交

代码随想录拓展day4 143.重排链表&#xff1b;141. 环形链表&#xff1b;面试题 02.07. 链表相交 关于链表的一些应用&#xff0c;基本都用到了快慢指针的思路。对于单链表来说&#xff0c;确定边界&#xff0c;也就是遍历时的终止条件非常重要。 143.重排链表 143. 重排链表…

Web前端105天-day65-ToolChain

ToolChain01 目录 前言 一、Webpack 二、指南 总结 前言 ToolChain01学习开始 一、Webpack 官网&#xff1a;webpack 浏览器仅支持: html css 和 js 三种语言实际开发中: 会使用到其他的一些语言, 例如 TS, sass, scss 等.... 这些语言开发起来更加方便快捷, 但是浏览器不…