PermissionX开源框架的使用

2023-11-12

背景

动态申请权限是一件特别繁琐的事情,涉及的权限一多,就让人头疼。Android提供给我们的运行时权限申请的API并不是很友好。

比如我们需要动态申请打电话的功能。除了在roidManifest.xml中声明权限之外,还要在执行拨打电话操作之前进行动态申请才行。

<uses-permission android:name="android.permission.CALL_PHONE"/>

然后在代码中动态申请:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
   
    ActivityCompat.requestPermissions(this, new String[]{
   Manifest.permission.CALL_PHONE}, 1);
} else {
   
    call();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
   
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 1) {
   
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
   
            call();
        } else {
   
            Log.d("TAG", "onRequestPermissionsResult: -------------");
        }
    }
}

这个就是我们动态申请一般的做法

先判断用户是否已经授予了CALL_PHONE权限,授予了就可以直接执行call方法,如果没有就需要去动态申请,然后咋onRequestPermissionsResult()回调中处理权限申请的结果,最后才能去执行拨打电话的操作。

可能觉得不是很繁琐,那是因为一开始我们学习就是这样做的,并不会觉得有什么“排斥”。

但是如果权限一多不止一个,而是需要同时申请多个权限,虽然ActivityCompat.requestPermissions()方法允许一次性传入多个权限名,但是你在onRequestPermissionsResult()回调中就需要判断哪些权限被允许了,哪些权限被拒绝了,被拒绝的权限是否影响到应用程序的核心功能,以及是否要再次申请权限。

而一旦牵扯到再次申请权限,就引出了一个更加复杂的问题。你申请的权限被用户拒绝过了一次,那么再次申请将很有可能再次被拒绝。为此,Android提供了一个shouldShowRequestPermissionRationale()方法,用于判断是否需要向用户解释申请这个权限的原因,一旦shouldShowRequestPermissionRationale()方法返回true,那么我们最好弹出一个对话框来向用户阐明为什么我们是需要这个权限的,这样可以增加用户同意授权的几率。

而且Android系统还提供了一个“拒绝,不要再询问”的选项。

只要用户选择了这个选项,那么我们以后每次执行权限申请的代码都将会直接被拒绝。

可是如果我的某项功能就是必须要依赖这个权限才行呢?没有办法,你只能提示用户去应用程序设置当中手动打开权限,程序方面已无法进行操作。

可以看出,如果想要在项目中对运行时权限做出非常全面的处理,是一件相当复杂的事情。

所以PermissionX就此诞生

先给出开源库的**原地址**

运用

最开始PermissionX是只支持kt的,但是作者(郭霖)结合国内开发人员使用java开发Android更多,进而开发了java版本的PmissionX。

比如前面的例子,现在就可以写成:

implementation 'com.permissionx.guolindev:permission-support:1.4.0'

先在项目中添加依赖(目前的最新版本)


                
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PermissionX开源框架的使用 的相关文章

随机推荐

  • idea提示git is not installed与“meaningless REX prefix used”

    记一次遇到idea提示 git is not installed 问题时的解决过程 我自己的笔记本上面的idea和git都安装挺久了 只是一直没有在idea上用git下载过东西 前两天准备学习spring源码 照着教程开始下载和编译源码 这
  • flume-使用KafkaChannel读取不到数据

    使用TAILDIR监听日志写入KafkaChannel 配置如下 a1 sources r1 a1 channels c1 描述source a1 sources r1 type TAILDIR a1 sources r1 filegrou
  • LINUX Developer must must master: grep ,

    http www vim org scripts script search results php 1 源码文件搜索 源码分析时 寻找文件名中包含某关键字的文件路径 比如寻找kernel源码中包含 usb的文件名 cd kernelSou
  • 五十款阿里开源软件说明介绍

    阿里巴巴的Github代码托管地址 https github com alibaba 通过写这篇文章从开源中国站上面看了很多 也从那里将开源软件的基本的介绍和下载地址拷贝到了文章当中 总体给我的一个感受就是阿里的开源实在太强大了 多到需要花
  • jenkins自动部署分布式项目(七)——Jenkins配置企业微信通知

    一 配置企业微信 1 打开企业微信手机端 打开群设置 找到群机器人 2 点击进入 然后点击添加 3 名字自己随意取 添加成功后 复制好Webhook地址 在配置Jenkins时使用 二 配置jenkins 1 安装插件 1 打开jenkin
  • linux-快捷键

    linux快捷键 ctrl a 移动到行首 ctrl e 移动到行尾 ctrl u 删除光标之前的字符 ctrl k 删除光标之后的字符 ctrl l 清空屏幕终端内容 同于clear
  • 使用cocotools对yolov5 6.1的检测结果进行评估(其他模型类似,只需要调整数据格式为coco的就行)

    介绍 本博客是讲如何使用yolov5对测试集进行检测 然后使用cocotools进行评估 增加COCOeval的每个类别ap显示 5 0版本模型看这个博客 代码 5 0版链接 6 1版链接 环境 pytorch只需要保证能跑起来yolov5
  • 基于FPGA的简易频率计(Verilog HDL)

    文章目录 1 设计要求 2 方案 3 单元电路设计 3 1 FPGA部分模块电路代码 3 1 1分频电路 3 1 2主控电路 3 1 3计数电路 3 1 4译码显示电路 3 1 5超量程指示电路 3 2外部电路设计 3 3顶层电路设计图 4
  • Python关于import的实验(6) 在子包中的模块的import语句作为子程序被调用并且也可以作为主程序独立执行,则必须要使用绝对导入

    Note that relative imports are based on the name of the current module Since the name of the main module is always main
  • Iceberg 学习笔记

    本博客对应于 B 站尚硅谷教学视频 尚硅谷数据湖Iceberg实战教程 尚硅谷 Apache Iceberg官方联合推出 为视频对应笔记的相关整理 1 Iceberg简介 1 1 概述 为了解决数据存储和计算引擎之间的适配的问题 Netfl
  • stm32:error: #268: declaration may not appear after executable statement in block

    今天写中断函数时报错 error 268 declaration may not appear after executable statement in block 谷歌翻译直译过来就是 声明可能不会出现在块中的可执行语句之后 其实语句没
  • 内存、ram、sram、dram、rom、eprom、epprom、flash、norflash、nandflash 的比较

    1 内存 什么是内存呢 在计算机的组成结构中 有一个很重要的部分 就是存储器 存储器是用来存储程序和数据的部件 对于计算机来说 有了存储器 才有记忆功能 才能保证正常工作 存储器的种类很多 按其用途可分为主存储器和辅助存储器 主存储器又称内
  • 黄金票据制作-新手入门

    0x01 前言 相信准备学习内网渗透的人 都会知道有黄金票据这个事情 而黄金票据的原理是和攻击方式 网站说的都一大堆概念 很难懂 这里我说声明一下 黄金票据的作用在于做权限维持 原理在于域服务器上有一个krbtgt用户 0x02 黄金票据和
  • 2023Go面试问答_Go Runtime

    Goroutine 定义 Goroutine 是一个与其他 goroutines 并行运行在同一地址空间的 Go 函数或方法 一个运行的程序由一个或更多个 goroutine 组成 它与线程 协程 进程等不同 它是一个 goroutine
  • 惯量比多少合适_惯量比

    电机的负载惯量估计方法 提供了一种电机的负载惯量估计方法 即便在电机的齿槽转矩较大或在负载机械系统中出现共振的时候 这种方法也能够 估计负载惯量 在加速反馈信号中检测振动 当检测到的振动等于或高于预定水平的时候 用系数 乘以估计惯量增益 其
  • 机器学习复习模拟题

    Q1 在回归模型中 下列哪一项在权衡欠拟合 under fitting 和过拟合 over fitting 中影响最大 A 多项式阶数 B 更新权重 w 时 使用的是矩阵求逆还是梯度下降 C 使用常数项 答案 A 解析 选择合适的多项式阶数
  • <刷题笔记>408计算机学科专业基础综合_操作系统_第一章_计算机系统概述_第一篇

    操作系统是一种系统软件 通用软件 普通大众都会使用的 如office 迅雷 专用软件 某些领域的专业人士使用的 如AutoCAD logic Pro 系统软件 计算机中负责管理 运行 控制和维护计算机系统资源的软件 如 操作系统 数据库管理
  • ORACLE updata是提示违反唯一约束条件

    如图所示 使用updata语句时提示违反唯一约束条件 语句如下 update table name set param1 xxx param2 xxx where param4 xxx 解决办法 一 能用Navicat for Oracle
  • wow.js

    一 页面在向下滚动的时候 有些元素会产生细小的动画效果 虽然动画比较小 但却能吸引你的注意 刚知道wow js这个插件 之前写的类似滚动时页面效果都是自己用jQuery写的 现在有了插件 开发更加快捷有效了 演示及下载地址 http www
  • PermissionX开源框架的使用

    背景 动态申请权限是一件特别繁琐的事情 涉及的权限一多 就让人头疼 Android提供给我们的运行时权限申请的API并不是很友好 比如我们需要动态申请打电话的功能 除了在roidManifest xml中声明权限之外 还要在执行拨打电话操作