Android 将EasyPermissions进一步封装,使得动态权限申请更加简明
1.引入依赖:
implementation 'pub.devrel:easypermissions:3.0.0'
2.在BaseActivity处理统一的结果回调和请求Code
核心内容:
(1)处理Activity本身继承的方法onRequestPermissionsResult
(2)实现接口EasyPermissions.PermissionCallbacks来接收请求结果
(3)定义申请权限跳转带出去的Code(Int类型,合法范围0-255)
(4)定义PermissionsCollBack是对结果返回的进一步简化 (非必须)
/***Author:XingHai.Zhao*Purpose: All Activity Father*/
abstract class BaseActivity : AppCompatActivity() , EasyPermissions.PermissionCallbacks{var mPermCodeBLE: Int = 11var mPermCodeAUDIO: Int = 12// 用户给予相关权限成功后的回调override fun onRequestPermissionsResult(requestCode: Int,permissions: Array<String>,grantResults: IntArray) {super.onRequestPermissionsResult(requestCode, permissions, grantResults)// 进一步使用 EasyPermissions 处理后续结果EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)}override fun onPermissionsGranted(requestCode: Int, perms: MutableList<String>) {// 授予权限mPermissionsCollBack?.let {it.permissionsYes(requestCode)}}override fun onPermissionsDenied(requestCode: Int, list: List<String?>) {// 请求权限被拒mPermissionsCollBack?.let {it.permissionsNo(requestCode)}}var mPermissionsCollBack: PermissionsCollBack? = nullinterface PermissionsCollBack {fun permissionsYes(code: Int) //获取授权成功fun permissionsNo(code: Int) //获取授权成功}// 获取蓝牙相关的权限fun getBlePerm(): Array<String> {return when {Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> arrayOf(Manifest.permission.BLUETOOTH_SCAN,Manifest.permission.BLUETOOTH_CONNECT,Manifest.permission.BLUETOOTH_ADVERTISE,Manifest.permission.ACCESS_FINE_LOCATION)Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q -> arrayOf(Manifest.permission.BLUETOOTH_ADMIN,Manifest.permission.ACCESS_FINE_LOCATION)else -> arrayOf(Manifest.permission.BLUETOOTH_ADMIN,Manifest.permission.ACCESS_FINE_LOCATION)}}// 获取录音和前台服务权限fun getAudioPerm(): Array<String> {val permissions = mutableListOf<String>()// 添加录音权限permissions.add(Manifest.permission.RECORD_AUDIO)// 根据 Android 版本添加前台服务权限if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {permissions.add(Manifest.permission.FOREGROUND_SERVICE)}return permissions.toTypedArray()}}
3具体请求用蓝牙举例:
//权限判断,第一次弹出系统的授权提示框if (EasyPermissions.hasPermissions(this, *getBlePerm())) {if (!BluetoothAdapter.getDefaultAdapter().isEnabled) {//打开蓝牙开关startActivity(Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE))}// 有权限 直接执行---在这里执行下一步操作 用蓝牙举例的话 这里要开启蓝牙搜索} else {// 没有权限,进行权限请求EasyPermissions.requestPermissions(this,getString("需要赋予相关权限,方能正常使用该功能!"),mPermCodeBLE,*getBlePerm())}mPermissionsCollBack = object :PermissionsCollBack{override fun permissionsYes(code: Int) {---在这里执行下一步操作 用蓝牙举例的话 这里要开启蓝牙搜索}override fun permissionsNo(code: Int) {}}
相关文章:
Android 将EasyPermissions进一步封装,使得动态权限申请更加简明
1.引入依赖: implementation pub.devrel:easypermissions:3.0.0 2.在BaseActivity处理统一的结果回调和请求Code 核心内容: (1)处理Activity本身继承的方法onRequestPermissionsResult (2)实现接口EasyPermissions.PermissionCallbacks来接收请求结果 (3)定义申请权…...
我的AI工具箱Tauri版-VideoReapeat视频解说复述克隆
本教程基于自研的AI工具箱Tauri版进行VideoReapeat视频解说复述克隆。 VideoReapeat视频解说复述克隆 是自研的AI工具箱Tauri版中的一款专用模块,旨在通过AI技术对视频解说内容进行复述和克隆。该工具可自动洗稿并重新生成视频解说,通过简单配置即可对大…...
MySQL5.7.42高可用MHA搭建及故障切换演示
系列文章目录 rpmbuild构建mysql5.7RPM安装包 MySQL基于GTID同步模式搭建主从复制 文章目录 系列文章目录前言一、MHA架构介绍1.MHA的功能2.MHA组成3.MHA故障转移过程4.MHA架构优缺点 二、环境准备1.服务器免密2.基于GTID主从复制搭建3.下载mha组件 三、MHA组件安装1.安装依赖…...
快速搭建最简单的前端项目vue+View UI Plus
1 引言 Vue是一套用于构建Web前端界面的渐进式JavaScript框架。它以其易学易用、性能出色、灵活多变而深受开发者喜爱,并且与其他前端框架(如React和Angular)相比,在国内市场上受到了广泛的认可和使用。点击进入官方…...
倍增练习(1)
A - ST 表 && RMQ 问题 题目思路:st表的板子题用于静态区间求最值,通过倍增的思想,先通过预处理将各个区间的最大值通过转移式求出f[i][j] max(f[i][j - 1], f[i (1 << (j - 1))][j - 1]);然后再进行重叠查询查询,k log2(r - l 1);,max(f[l][k], f[r - (1 &l…...
MATLAB 在数学建模中的深入应用:从基础到高级实践
目录 前言 一、MATLAB基础知识 1.1 MATLAB工作环境简介 1.1.1 命令窗口(Command Window) 1.1.2 工作区(Workspace) 1.1.3 命令历史(Command History) 1.1.4 编辑器(Editor) 1…...
Unity 设计模式 之 【什么是设计模式】/ 【为什么要使用设计模式】/ 【架构和设计模式的区别】
Unity 设计模式 之 【什么是设计模式】/ 【为什么要使用设计模式】/ 【架构和设计模式的区别】 目录 Unity 设计模式 之 【什么是设计模式】/ 【为什么要使用设计模式】/ 【架构和设计模式的区别】 一、简单介绍 二、 Unity 设计模式 1、Unity 开发中使用设计模式的特点 2…...
[数据集][目标检测]智慧交通铁路异物入侵检测数据集VOC+YOLO格式802张7类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):802 标注数量(xml文件个数):802 标注数量(txt文件个数):802 标注类别…...
飞驰云联FTP替代方案:安全高效文件传输的新选择
FTP协议广泛应用各行业的文件传输场景中,由于FTP应用获取门槛低、使用普遍,因此大部分企业都习惯使用FTP进行文件传输。然而面临激增的数据量和网络安全威胁的不断演变,FTP在传输安全性与传输性能上有所欠缺,无法满足企业现在的高…...
Hive内置集合函数-size,map_keys,map_values,sort_array,array_contains
1. Hive内置Collection Functions 以下函数为Hive是提供的内置集合函数: 返回类型函数(签名)函数说明intsize(Map<K.V>)Returns the number of elements in the map type.intsize(Array)Returns the number of elements in the array type.arraymap_keys(Map<K.V>…...
Exchange Online 计划 2 部署方案
目录 前言 一、前期准备 1. 了解 Exchange Online 计划 2 的功能 2. 系统要求 3. 网络要求 4. 账户和许可 二、安装和配置 Exchange Online 计划 2 1. 注册 Microsoft 365 订阅 2. 验证域 3. 用户和许可证分配 4. 迁移现有邮箱 迁移步骤 三、配置 Exchange Online …...
图数据库的力量:深入理解与应用 Neo4j
图数据库的力量:深入理解与应用 Neo4j 文章目录 图数据库的力量:深入理解与应用 Neo4j1、什么是 Neo4j?版本说明 2、Neo4j 的部署和安装Neo4j Web 工具介绍 3、体验 Neo4j加载数据查询数据数据结构 4、Cypher 入门创建数据查询数据关系深度查…...
Deutsch intensiv C1 Schreiben
Deutsch intensiv C1 Schreiben Part A1, Kasten Part A 1, Kasten (1)zeigt (A) (2)gibt Auskunft ber (A)/darber (3)liefert Daten/Informationen ber(A)/darber (4)stellt(A) dar...
大数据新视界 --大数据大厂之DevOps与大数据:加速数据驱动的业务发展
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
实战OpenCV之图像阈值处理
基础入门 图像阈值处理是一种二值化技术,它基于预设的阈值,可以将图像中的像素分为两大类:一大类是背景,另一大类是前景或目标对象。这个过程涉及将图像中的每个像素值与阈值进行比较,并根据比较结果决定保留原始值还是…...
登录后继续执行方法
场景 点击按钮,检测到未登录,直接跳转到登录页,登录成功后,返回页面继续执行刚才的点击事件 思路 在跳转时用一个队列存储该事件,登录成功后执行队列里的事件 队列 class Queue {constructor() {this.task []}cl…...
JVM-类加载器的双亲委派模型详解
JVM中存在三个默认的类加载器: BootstrapClassLoaderExtClassLoaderAppClassLoader AppClassLoader的父加载器是ExtClassLoader,ExtClassLoader的父加载器是 BootstrapClassLoader。 它们之间的关系是:AppClassLoader->ExtClassLoader-&…...
【计算机基础题目】Linux系统中文件权限 字母权限和数字权限的相互转换
创作日志: 很久之前对这个略有了解,但是现在完全忘记了,看到这类题目一脸懵逼,现在系统复习下。 1、权限的数字表示(3位) 在Linux系统中,文件权限由一个三位的八进制数表示,每一位代…...
VRRP协议原理
目录 VRRP概述 VRRP产生背景 VRRP介绍 VRRP相关概念 VRRP报文 VRRP的三种状态 VRRP工作原理 优先级和抢占 VRRP接口跟踪 VRRP概述 VRRP产生背景 通常同一网段内的所有主机都会配置相同的网关,以访问外部网络 当唯一的网关设备发生故障时,所有主…...
Dockerfile自定义制作镜像,其中10个指令的作用分析
docker容器中 做镜像是重要的技能。 docker commit只能制作比较简单的镜像, 要制作比较完善的镜像, 自定义程度比较高的, 就需要用到dockerfile dockerfile可以回溯历史 动态生成镜像。 FROM是基础镜像 CMD是在容器创建的时候默认的启动命令 …...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
