Android版本大于M时动态申请权限的方法

2023-10-29

问题描述

Android应用开发时,若版本大于M,则有些权限需要在运行时用Java代码进行动态获取。

解决方案

添加supportv7包

在build.gradle(:app)文件dependencies节点中,添加v7包的依赖:

implementation 'com.android.support:appcompat-v7:28.0.0'

分支处理

在应用初始化时,判断sdk版本,进行分支处理:

 if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M){
     startInit();
 }else {
     mCheckPermission(); //集中进行权限的申请
 }

获取权限主要代码

集中获取权限:


// 获取权限
public void mCheckPermission(){
    ArrayList<String> plist = new ArrayList<>();
    try {
        int per = ActivityCompat.checkSelfPermission(Login.this,  "android.permission.WRITE_EXTERNAL_STORAGE");
        if(per != PackageManager.PERMISSION_GRANTED){
            plist.add("android.permission.WRITE_EXTERNAL_STORAGE");
            plist.add("android.permission.READ_EXTERNAL_STORAGE");
        }

        int per2 = ActivityCompat.checkSelfPermission(Login.this,  "android.permission.CAMERA");
        if(per2 != PackageManager.PERMISSION_GRANTED){
            plist.add("android.permission.CAMERA");
        }

        int per3 = ActivityCompat.checkSelfPermission(Login.this,  "android.permission.ACCESS_FINE_LOCATION");
        if(per3 != PackageManager.PERMISSION_GRANTED){
            plist.add("android.permission.ACCESS_FINE_LOCATION");
            plist.add("android.permission.ACCESS_COARSE_LOCATION");
        }

        if(plist.size()>0){
            ActivityCompat.requestPermissions(Login.this, plist.toArray(new String[plist.size()]), 9999);
        }else{
            startInit();
        }
    }catch (Exception e){
        e.printStackTrace();
    }
}

//回调处理
@Override
public void onRequestPermissionsResult(final int requestCode, @NonNull String[] permissions,
                                          @NonNull int[] grantResults){
   boolean isall = true;
    for(int i=0; i<grantResults.length; i++){
       if(grantResults[i]==-1){
           isall = false;
       }
   }

    if(isall){
        startInit();
    }else{
        new AlertDialog.Builder(Login.this, AlertDialog.THEME_HOLO_LIGHT)
                .setTitle("权限获取提示")
                .setMessage("请允许所有权限后,使用本系统!")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                })
                .show();
    }

}

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

Android版本大于M时动态申请权限的方法 的相关文章

  • Google Drive REST API 是否仍需要 GET_ACCOUNTS 权限?

    Google 已弃用 Google Drive Android API 我们正在迁移到 Google Drive REST API v3 2年前 我们有使用Google Drive REST API v2 的经验 我们知道GET ACCOU
  • 在 Android 模拟器上运行完整的 Android 手机 ROM

    正如标题所说 是否可以在 Android 模拟器中运行完整的 Android 设备 ROM 是的 你可以 但让它 100 工作可能很困难 大多数 ROM 都包含其运行硬件的特定驱动程序 我并不是 100 全力以赴 但可以尝试以下步骤 创建
  • Android Toast 消息不起作用

    我正在通过 Andengine 为 Android 开发游戏 我有 MainActivity 类和 GameScene 类 我在 GameActivity 中使用 Toast 消息 它正在发挥作用 Toast makeText this H
  • 处理 SavedInstances 并恢复活动

    基本上我的应用程序有 2 个活动 说 A 和 B A 启动 B Activity B 播放音乐并且还有通知 情况 1 当视图仍在活动 B 上时 我按主页按钮 然后单击通知 活动 B 将打开 其视图完好无损并播放音乐 因为在清单中我使用 an
  • 单击另一个项目/小部件时展开/打开微调器?

    当用户单击另一个按钮时 我试图展开微调器 例如 我有一个带有值的微调器和一个 确定 按钮 当用户单击 确定 按钮而不从微调器中选择任何值时 微调器会自行扩展 是否可以在无需用户与微调器交互的情况下获得扩展微调器的事件 只需致电Spinner
  • animation.start() 或animation.startNow() 不会立即开始动画

    我有一个奇怪的问题 有时应该淡出我的控件 ImageButton 的动画不会立即启动 我使用淡出动画来隐藏它 然后在 myListener 的末尾 onAnimationEnd 中 我将新资源作为按钮上的图像 我的应用程序代码中的某处 An
  • Android 软键盘 - 禁用某些键

    我正在寻找一种使用内置软键盘并禁用某些键的方法 例如 如果用户不应该使用字母 f 因为在列表中该字母不存在 则该键应显示为灰色 想象一下 用户可以在文本框中键入文本以从列表中进行选择 该列表包含 ABC BCCD 床 如果用户输入 A 然后
  • 通过模拟器控制台或 ADB 更改 Android 模拟器方向

    我正在尝试构建一个自动化测试框架 用于检查应用程序应该响应的基本内容 而不会崩溃 其中之一是检查应用程序是否正确响应配置更改 现在 由于它是自动化的 我必须以编程方式在横向和纵向之间切换模拟器的方向 并观察它是否崩溃 大写 因为有很多与 c
  • adb 今天无法连接到 VirtualBox 中的 Android-x86

    我在 VirtualBox 中成功安装了 Android x86 v3 2 eeepc 一段时间 这是帮助我在 Android 上调试 USB 主机应用程序的好方法 此类配置的安装是 安装VirtualBox 将 Android x86 v
  • 如何在启用抗锯齿的情况下旋转可绘制对象

    我需要将 ImageView 旋转几度 我通过子类化 ImageView 和重载来做到这一点onDraw Override protected void onDraw Canvas canvas canvas save canvas sca
  • NDK8d 未找到 std::string 操作(即 stol、stoi)

    我尝试使用 ndk r8d 和 c 11 支持来建立我的第一个 android 项目 一些 c 11 机制工作正常 即 lambda 表达式 但是当我尝试时 使用新的字符串操作之一 编译失败 错误 stol 不是 std 的成员 这是我的
  • Ionic 框架 - Config.xml

    我需要修改 config xml 文件 因此在针对 Android 进行编译时我会获取以下权限
  • Android 上的 SQLite JDBC 驱动程序

    我正在尝试使用xerial sqlite jdbc在 Android 中管理我的数据库没有成功 我得到了java lang NoClassDefFoundError org sqlite SQLiteConnection异常 我已经导入了这
  • Android 导航组件 - 从“任何地方”/基本片段导航?

    我正在开发一个应用程序 它有一个奇怪的花招 可以在设备旋转时打开特定的片段 在实现 android 的导航组件之前 所需要的只是对当前活动的引用 并且可以在特定时刻向用户显示的任何内容之上执行手动片段事务 但是在转移到导航组件之后 我发现很
  • java.lang.UnsatisfiedLinkError - android studio gradle 中的 NDK?

    文件夹结构 app main java jni Android mk Application mk hello jni c res 在构建 gradle apply plugin com android application androi
  • 无法使用 Zxing Android 扫描 Code 128

    我已将 ZXing 条码阅读器集成到我的 Android 应用程序中 它可以扫描大部分代码 但我有一张电费单 它无法扫描 使用 Galaxy Ace 5 0MP 我认为问题是由于相机分辨率和焦点造成的 因为当我使用 Xperia SL 12
  • 通过 Google 帐户从 Google Play 安装的应用程序列表

    以下是我的问题 是否可以通过使用任何 api 以编程方式通过 Google Play 获取用户已安装的应用程序列表 请注意 我并不是询问设备中当前安装的应用程序列表 而是询问在某个时刻已安装的应用程序列表 我需要解决上述问题 因为我正在考虑
  • 如何在android中将文本放在单选按钮的左侧

    我想将单选按钮的文本放在左侧而不是右侧 我找到了这个解决方案
  • 永久删除Android文件

    我发现了一个名为这会从 Android 设备中永久删除文件和文件夹 以便删除的文件无法再恢复 这是我正在谈论的应用程序 但我想知道如何做到这一点 我知道它是用 android studio 制作的 i尝试了常规的删除方式file delet
  • 如何使用socket.io发送图像文件(二进制数据)?

    我无法从以下位置发送数据Android Client to NodeJS Server I use Socket IO 客户端 https github com socketio socket io client java我的客户端中的ja

随机推荐

  • 4399游戏校招笔试题

    设一组初始记录关键字序列为 49 38 65 97 76 13 27 49 则以第一个关键字49为基准而得到的一趟快速排序结果是 A 38 13 27 49 49 65 97 76 B 13 27 38 49 65 76 97 49 C 2
  • 常用技术指标之一文读懂KDJ指标

    什么是KDJ指标 KDJ中文名又叫随机指标 英文名叫Stochastic oscillator 由乔治 莱恩 George Lane 于20世纪50年代首创 最早用于期货市场 KDJ指标能比较迅速 直观地研判行情 主要用于分析中短期趋势 是
  • 主键约束(PRIMARY KEY) [MySQL][数据库]

    主键约束 PRIMARY KEY 主键约束的特点 主键约束相当于唯一性约束 非空约束 主键约束不允许重复 也不允许出现空值 一个表最多只能有一个主键约束 建立主键约束可以在列级别创建 也可以再表级别创建 主键约束对应着表中的一列或者多列 对
  • JDK8:使用Optional进行变量判空、集合遍历

    防止 NPE 是程序员的基本修养 NPE Null Pointer Exception 一直是我们最头疼的问题 也是最容易忽视的地方 NPE常是导致Java应用程序失败的最常见的原因 在日常研发工作中 经常会处理各种变量 集合 但在使用的过
  • 【vue、uni-app】文本信息的完全显示(回车换行、连续空格、数字&英文换行)

    vue uni app 文本信息的完全显示 回车换行 连续空格 数字 英文换行 数据说明 完整显示 一 vue端 1 不做处理的效果 2 处理后 二 uni app端 1 不做处理的效果 2 处理后 总结 记录学习的轨迹 2021 12 0
  • 线程知识点补充

    全局解释器锁GIL 是什么 GIL本质也是一把互斥锁 将并发变成串行 降低效率以保证数据的安全性 每有一个进程 进程内就必然有一个用来执行代码的线程 也会有一个用来执行垃圾回收的线程 为了避免执行代码的线程和执行垃圾回收的线程对同一份数据进
  • golang 单元测试、性能测试、性能监控技术

    golang 单元测试 性能测试 性能监控技术 go语言提供了强大的测试工具 下面举例简单介绍一下 go test 单元测试 go test bench 性能测试 go tool pprof 性能监控 go test 单元测试 例如对包he
  • 至强服务器性能排行,英特尔至强处理器排名天梯 至强cpu天梯2020排名

    排名 名称 评分 1 Intel Xeon Platinum 8173M 2 00GHz 28 860 2 Intel Xeon Gold 6154 3 00GHz 27 722 3 Intel Xeon Gold 6138 2 00GHz
  • 【研究生】毕业答辩PPT制作和讲述要点(整理)

    引用网址 http blog sciencenet cn blog 53846 232974 html 引言 在QQ群上和研三的点评答辩ppt制作结果 不知不觉 唠叨 了很多 其中 让大家共享一下彼此的ppt文档 取人所长 不想 学生杨涛有
  • React SSR - 写个 Demo 一学就会

    今天写个小 Demo 来从头实现一下 react 的 SSR 帮助理解 SSR 是如何实现的 有什么细节 什么是 SSR SSR 即 Server Side Rendering 服务端渲染 是指将网页内容在服务器端中生成并发送到浏览器的技术
  • BTC-分叉

    分叉 fork 原来由一条链变为了两条链 造成原因 有可能是两个节点差不多同时挖到了一个区块 然后同时发布出去 这时候就会造成临时性的分叉 state fork forking attack deliberate fork 比特币的协议发生
  • 扫码普通二维码跳转微信小程序指定页面(体验服和开发服跳转链接不能动态传参)

    好久不见 时隔多年我又来记录问题来了 记录这次问题的主要原因是减少你我去搜索资源的时间 下面开始讲讲我越到的问题 下面说的是针对小程序体验版或者开发版哈 正式环境不存在这个问题 需求 pc端扫码登录 pc创建一个二维码 用户用微信自带扫码功
  • Python 中 Iterator和Iterable的区别

    Python中 list truple str dict这些都可以被迭代 但他们并不是迭代器 为什么 因为和迭代器相比有一个很大的不同 list truple map dict这些数据的大小是确定的 也就是说有多少事可知的 但迭代器不是 迭
  • STM32CubMX_MQ135检测空气质量

    一 MQ135简介 MQ135是测量空气污染情况常用的一个传感器 具有代表性 价格低 寿命长 敏感度也OK 主要用于测量空气中二氧化碳 氮氧化物 氨气 酒精 苯类等 这几样气体可以说都属于家用空气污染测定中的重要成份 因此用这个传感器刚刚好
  • BOT_SORT复现(Ubuntu20.04)

    论文地址 https arxiv org abs 2206 14651 代码地址 NirAharon BoT SORT BoT SORT Robust Associations Multi Pedestrian Tracking githu
  • tensorflow:使用卷积网络(CNN)实现mnist

    tensorflow1 8 0 python3 6 4 coding utf 8 import tensorflow as tf from tensorflow examples tutorials mnist import input d
  • 【adb 查看手机当前应用的包名,所有应用的包名以及安装位置】

    1 查看是否连接手机 adb devices 2 进入指定的device的shell adb shell 3 查看当前正在运行的APK的包名 adb shell dumpsys window findstr mCurrentFocus 例如
  • BigInteger 与 BigDecimal的区别

    目录 一 BigInteger 二 BigDecimal 一般来说 BigInteger用的不是很多 BigDecimal用的稍微多一点 就比如说JDBC中 如果一个字段的数据库类型是Number 那么 getObject getClass
  • ES6中声明变量的方法(let,const)

    ECMAScript 6 0 以下简称ES6 是JavaScript语言的下一代标准 已经在2015年6月正式发布了 它的目标 是使得JavaScript语言可以用来编写复杂的大型应用程序 成为企业级开发语言 ECMAScript和Java
  • Android版本大于M时动态申请权限的方法

    问题描述 Android应用开发时 若版本大于M 则有些权限需要在运行时用Java代码进行动态获取 解决方案 添加supportv7包 在build gradle app 文件dependencies节点中 添加v7包的依赖 impleme