当前位置: 首页 > news >正文

Android---PermissionX实现动态权限申请

Google 在 Android 6.0 开始引入了权限申请机制,将所有权限分成了正常权限危险权限。App 每次在使用危险权限时需要动态的申请并得到用户的授权才能使用。

PermissionX是一个扩展Android库,使Android运行时权限请求变得极其容易。你可以将它用于基本的许可请求场合或处理更复杂的情况,如显示理由对话框或手动进入应用程序设置以获得许可。官方网址:https://github.com/guolindev/PermissionX

基本使用

1. 在 build.gradle 文件中添加如下依赖

// 第三方权限框架
// https://github.com/guolindev/PermissionX
implementation 'com.guolindev.permissionx:permissionx:1.7.1'

2. 在 AndroidManifest.xml 中添加声明需要申请的权限。这里添加了读取存储权限、相机权限、电话权限。

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

3. 使用以下代码进行请求。

PermissionX.init(this).permissions(Manifest.permission.READ_CONTACTS,Manifest.permission.CAMERA,Manifest.permission.CALL_PHONE).request{ allGranted, grantedList, deniedList ->if(allGranted){Toast.makeText(this, "All permissions are granted", Toast.LENGTH_LONG).show()// todo something}else {// deniedList 包含所拒绝的权限Toast.makeText(this, "These permissions are denied: $deniedList", Toast.LENGTH_LONG).show()// todo something}}

注意:Manifest 一定是要 android 包下的 

将一个 Activity 的实例传递到 init 方法中。在 permissions() 方法中添加需要动态申请的权限,然后调用 request 方法进行实际请求。请求结果将在请求 lambda 中回调。

allGranted : Boolean。表示用户是否授权所有的请求。

grantedList:保存用户同意的所有权限。

deniedList:保存用户拒绝的所有权限。

更多使用

如你所知,Android 提供了 shouldShowRequestPermissionRationale 方法来指示我们是否应该显示一个基本原理对话框来向用户解释我们为什么需要该权限。否则用户可能会拒绝我们请求的权限并选中“不再询问”选项。

为了简化这个过程,PermissionX 提供了 onExplainRequestReason 方法。在请求方法之前链接此方法,如果用户拒绝其中一个权限,onExplainRequestReason 方法将首先获得回调。然后你可以调用 showRequestReasonDialog 方法向用户解释为什么这些权限是必须的。

showRequestReasonDialog 方法将提示一个基本原理对话框,第二个参数解释为什么需要这些权限。如果用户点击第三个参数提供的“确定”按钮,PermissionX 将再次请求第一个参数里被拒绝的权限。

第四个参数可选,为“取消”按钮,如果用户点击该按钮,则将取消解释对话框。如果拒绝的权限是必须的,可以不设置第四个参数,对话框将无法取消。这意味着用户必须允许进一步申请这些权限。

当然,用户仍然可以拒绝一些权限,并选中“不再询问”选项。在这种情况下,每次我们再次请求这些权限时都会被自动拒绝。我们唯一能做的就是提示用户需要在应用设置中手动允许这些权限以继续使用。但是 PermissionX 做的更好。 

PermissionX 提供 onForwardToSettings 方法来处理这种情况。在请求方法之前链接此方法,如果某些权限被用户“拒绝并且不再询问”,onForwardToSettings 方法将得到回调。然后你可以像下面这样调用 showForwardToSettingDialog 方法。

showForwardToSettingDialog方法中的参数与 showRequestReasonDialog 方法相似。当用户点击肯定按钮时,PermissionX 将转到应用程序的设置页面,用户可以非常快速地打开必要的权限。当用户切换回应用程序时,PermissionX 将自动再次请求必要的权限。

相关文章:

  • vscode开发FPGA(0)--windows平台搭建
  • JS逆向进阶篇【去哪儿旅行登录】【上篇】
  • 意外删除照片数据?恢复照片数据的 10 大照片恢复工具方法
  • 2024/2/12 图的基础知识 2
  • 无人机飞行原理,多旋翼无人机飞行原理详解
  • 【国产MCU】-CH32V307-基本定时器(BCTM)
  • kali系统概述、nmap扫描应用、john破解密码、抓包概述、以太网帧结构、抓包应用、wireshark应用、nginx安全加固、Linux系统加固
  • 【c语言】字符串常见函数 上
  • 【QT+QGIS跨平台编译】之三十:【NetCDF+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
  • linux系统zabbix监控服务端部署
  • 电路设计(16)——纪念馆游客进出自动计数显示器proteus仿真
  • C++ Qt框架开发 | 基于Qt框架开发实时成绩显示排序系统(2)折线图显示
  • 深入理解XGBoost:集成学习与堆叠模型
  • 【c语言】字符串常见函数 下
  • HTML 超文本标记语言
  • .pyc 想到的一些问题
  • Apache Spark Streaming 使用实例
  • CAP理论的例子讲解
  • ES6--对象的扩展
  • express.js的介绍及使用
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript-Array类型
  • KMP算法及优化
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • node.js
  • spring-boot List转Page
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 读懂package.json -- 依赖管理
  • 回流、重绘及其优化
  • 技术胖1-4季视频复习— (看视频笔记)
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 前端面试之闭包
  • 学习ES6 变量的解构赋值
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (10)STL算法之搜索(二) 二分查找
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (分布式缓存)Redis持久化
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (四)图像的%2线性拉伸
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • :O)修改linux硬件时间
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [BUUCTF]-PWN:wustctf2020_number_game解析(补码,整数漏洞)
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [BZOJ4010]菜肴制作
  • [C#]winform制作仪表盘好用的表盘控件和使用方法
  • [C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh
  • [C\C++]读入优化【技巧】