Android 6.0运行时获取权限详解

UniApp跨Android版本获取MAC地址实战:从6.0以下到高版本的兼容性策略 本文详细解析了在UniApp中跨Android版本获取MAC地址的兼容性策略,从Android 6.0以下到高版本的不同方案。涵盖了传统获取方法、运行时权限处理、Android 10+的随机MAC问题及厂商特殊API,提供了完整的版本适配逻辑和错误处理方案,帮助开发者解决实际项目中的兼容性挑战。 阅读详情
  • 最近在工作过程中会遇到,明明已经在AndroidManifest.xml中配置了权限,但是就是没有作用,百度了之后才发现现在在应用系统大于等于6.0的手机上面,需要动态的获取权限。就是当你需要这个权限的时候,需要手机给用户一个提示选择是否同意开启这个权限。
  • 看到网上有很多关于这方面的文章,但是大部分都是很随意的copy别人的,看起来好像很麻烦似的,其实动态获取权限就那几行代码就可以搞定。
  • 接下来就举一个很常用的需要获取手机IMEI值时需要动态获取权限的例子代码,后面会附送源代码连接。
 public static String IMEI = null;
    private int WRITE_EXTERNAL_STORAGE_REQUEST_CODE = 1;
    String str="";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        isOK();
    }
//    public  String getIMEI(Context context){
//
//        if (TextUtils.isEmpty(IMEI)){
//            TelephonyManager tm = (TelephonyManager)context.getSystemService(context.TELEPHONY_SERVICE);
//            IMEI = tm.getDeviceId();
//        }
//        return IMEI==null?"未知设备":IMEI;
//    }
    public void isOK(){
        int osVersion = Integer.valueOf(android.os.Build.VERSION.SDK);
        if (osVersion>22){
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
                    != PackageManager.PERMISSION_GRANTED) {
                //申请WRITE_EXTERNAL_STORAGE权限
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE},
                        WRITE_EXTERNAL_STORAGE_REQUEST_CODE);
            }else{
                getImei();
            }
        }else{
            //如果SDK小于6.0则不去动态申请权限
            getImei();
        }
//        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE)
//                != PackageManager.PERMISSION_GRANTED) {
//            //申请WRITE_EXTERNAL_STORAGE权限
//            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE},
//                    WRITE_EXTERNAL_STORAGE_REQUEST_CODE);
//        }else{
//            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE},
//                    WRITE_EXTERNAL_STORAGE_REQUEST_CODE);
//        }
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == WRITE_EXTERNAL_STORAGE_REQUEST_CODE) {

            getImei();
            Toast.makeText(getApplicationContext(),"授权成功",Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(getApplicationContext(),"授权拒绝",Toast.LENGTH_SHORT).show();
        }
    }
    public void getImei(){
        TelephonyManager tm = (TelephonyManager)this.getSystemService(this.TELEPHONY_SERVICE);
        IMEI = tm.getDeviceId();
        String mtype = android.os.Build.MODEL;
        Log.d("Main",mtype);
        Toast.makeText(this,"IMEI的值为:"+mtype,Toast.LENGTH_SHORT).show();
    }
  • 1首先判断手机的SDK版本是否大于22,如果小于的话就不需要动态的去申请权限,让用户有更好的体验。
ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
                    != PackageManager.PERMISSION_GRANTED

这里判断用户是否获取READ_PHONE_STATE这个权限了没有,如果没有则去申请

  //申请READ_PHONE_STATE权限
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE},
                        WRITE_EXTERNAL_STORAGE_REQUEST_CODE);
  • 2 如果已经获取了这个权限就不需要申请,可以直接执行下一步需要做的方法。
  • 3申请动态获取权限之后回有一个回调的方法,如果用户同意的话,就执行下一步的方法。在这里需要强调的是这个回调是异步的执行的下一步的方法一定要写在获取权限成功的逻辑里面,要不然会调用与代码不同步
 @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == WRITE_EXTERNAL_STORAGE_REQUEST_CODE) {

            getImei();
            Toast.makeText(getApplicationContext(),"授权成功",Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(getApplicationContext(),"授权拒绝",Toast.LENGTH_SHORT).show();
        }
    }

好了,其实动态获取权限就这么简单,还有别忘了,还要在你的AndroidManifest.xml中配置你需要申请的权限,大家可以加一下Android技术开发群,大家一起学习,成长 QQ群667941932。

下载源代码

Android 6.0运行时动态权限详解与实战 Android 6.0(API 级别 23)引入了运行时权限模型,标志着Android应用安全机制的重大变革。在此之前,应用在安装时需声明所有权限,用户只能选择接受全部或放弃安装,缺乏对敏感权限的细粒度控制。自Android 6.0起,系统将危险权限划归为运行时权限,要求应用在实际使用前动态申请,显著提升了用户隐私保护能力。本章将深入剖析动态权限的背景动因、设计目标及其在整个Android权限体系中的定位,帮助读者建立完整的认知框架,为后续技术实践打下坚实基础。 阅读详情

相关推荐

Android6.0动态申请权限

在github上面找demo,发现都是集成比较困难,还携带各种lib。表示有点难看懂。 我下载下来测试后,发现这个库在显示方面还没发现问题(在我的红米Note4x上面该弹的窗都弹了), 也是star的最高的一个项目:PermissionsDispatcher:https://github.com/hotchemi/PermissionsDispatcher 但是,有些看不懂的。所以就放弃了。后来选择了一个朋友发的简单的demo。稍微修改了下,能用。下面讲正文

Android 6.0动态权限申请的处理

1:检查权限: if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //申请WRITE_EXTERNAL_STORAGE权限

qq_29333911的博客 1095

KDD 2025 | 人大团队提出多任务贝叶斯联邦学习算法,同时处理分类和回归

©PaperWeekly 原创 ·作者 |吕俊良单位 |中国人民大学统计学院本文介绍了中国人民大学统计学院的一篇关于多任务贝叶斯联邦学习的文章“Task Diversity in Bayesian Federated Learning: Simultaneous Processing of Classification and Regression”,本文被 KDD 2025 接收,代码已经...

Paper weekly 2746

Android 6.0 运行时权限处理

运行时权限介绍 Android 6.0在我们原有的AndroidManifest.xml声明权限的基础上, 又新增了运行时权限动态检测,以下权限都需要在运行时判断: 身体传感器 日历 摄像头 通讯录 地理位置 麦克风 电话 短信 存储空间 运行时权限处理 Android6.0系统默认为targetSdkVersion小于23的应用默认授予了所申请的所有权限, 所以如果你以前的AP

hongcha36的博客 743

比较器和运算放大器-2

今天继续了解输入阻抗问题,观察下图:首先考虑在我们没有接运放时,A点输出电压为6V,当接入如图所示的阻抗时电压还是6V吗?共模电阻和红框内对地电阻并联,阻值变小,相当于5k,通过计算可以求得A点电压变为4V,这样A的值发生了改变,试想一下这样的信号接入到运放的两端是不是相当于比较的两端信号发生了改变,那结果一定会发生偏离。信号源一般内阻是不确定的,一般也不是很小,如果不想改变输入阻抗,那唯一的办法就是改变运放的内阻了,比如内阻改为100K,1M等,越大越好,是不是A点电压就会无限接近6V。

weixin_42855218的博客 1312

Linux DRM驱动实战:手把手教你用drmModeSetCrtc显示纯色画面(附完整代码)

本文提供了一份完整的Linux DRM驱动实战指南,手把手教你使用drmModeSetCrtc在屏幕上显示纯色画面。文章详细解析了从打开设备、获取资源、创建帧缓冲区到最终提交画面的完整调用流程,并附带了可直接编译运行的完整代码示例,帮助开发者快速上手Linux图形底层开发。

weixin_29216353的博客 513

Android 6.0动态权限申请

1:检查权限:   if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //申请WRITE_EXTERNAL_STORAGE权限 ...

陈立的博客 1097

手把手教你用NE555+LM324搭建红外倒车雷达(附Multisim仿真文件)

本文详细介绍了如何使用NE555定时器和LM324运算放大器搭建一个红外倒车雷达系统。内容涵盖从核心原理拆解、模块电路设计(包括红外发射、接收放大、检波与电压比较)到实战焊接调试的全过程,并提供了Multisim仿真验证思路,帮助电子爱好者与初学者将模拟电路理论转化为可工作的实用项目。

echo99的专栏 680

Android6.0权限适配之WRITE_EXTERNAL_STORAGE(SD卡写入)

前一篇博客中介绍了Android6.0运行时权限简介,最近遇到这么一个情况,就是一个App以前都是在SD卡根目录直接新建了一个XXX/image/目录,来保存图片缓存的,但是如果适配到Android6.0,我们就需要弹出对话框给用户,来申请WRITE_EXTERNAL_STORAGE权限,如果仅仅是缓存图片为了提高加载速度,对于一个小白用户来讲,好像并不是什么值得让他授权的理由。。。 下面记录一

xiechengfa的技术笔记 4万+

ArcGIS-裁剪遥感影像及dem图像

6、选择【工具箱】-【数据管理工具】-【栅格】-【裁剪】。在【输入栅格】里选择要裁剪的dem,在【输出范围】里选择刚创建的裁剪范围。选择一个输出路径,其他参数保存默认。2、起一个名称,要素类型选择【面】。点击【编辑】选择与要裁剪的dem一致的地理坐标系。1、创建需要裁剪区域的面层shp,右击选择【新建】-【shapefile】3、点击编辑器,选择开始编辑。4、选择【裁剪范围】,点击确定。5、画出想要裁剪的范围并保存。

siwenaiyou的博客 1万+

iOS马甲包过审实战:如何用5天时间搞定4.3审核(附完整代码混淆方案)

本文提供了一套为期五天的高效实战方案,专门解决iOS应用因重复或抄袭问题而被App Store的4.3条款拒绝的难题。方案涵盖深度分析、代码混淆、资源翻新及环境隔离等系统性步骤,并附有完整的代码混淆示例,旨在帮助开发者在合规框架内重塑应用,显著提升过审成功率。

weixin_29234239的博客 148

Android6.0动态权限申请(6.0普及后会广泛使用)

1.我们需要在用到权限的地方,每次都检查是否APP已经拥有权限,比如我们有一个下载功能,需要写SD卡的权限,我们在写入之前检查是否有WRITE_EXTERNAL_STORAGE权限,没有则申请权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)

a_fly_pig的博客 315

华为OD技术面真题 - Python开发 - 2

汇总华为OD技术面八股Python八股,高频技术真题并提供详细解答。

qq_45776114的博客 910

Android 6.0 权限模型——Permissions

原文:http://developer.android.com/preview/features/runtime-permissions.html  Android 6.0引入了一种新的应用权限模型,旨在简化用户安装和升级应用的过程。 如果在 M 预览版上运行的应用支持新权限模型,则用户无需在安装或升级应用时授予任何权限。相反,应用会根据需要请求权限,且系统将向用户显示一个请求权限的对话框。

Iwillgoontheway的专栏 2185

【WRFDA运行第五期】运行 OBSGRID 客观分析

运行 OBSGRID 客观分析

WW、forever的博客 1050

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Android 6.0 运行时权限处理完全解析

转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/50709663; 本文出自:【张鸿洋的博客】 一、概述 随着Android 6.0发布以及普及,我们开发者所要应对的主要就是新版本SDK带来的一些变化,首先关注的就是权限机制的变化。对于6.0的几个主要的变化,查看查看官网的这篇文章http://develope

Hongyang 29万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Android运行时权限详解

Android运行时权限详解

Android应用开发工程师 3227

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android 6.0+ 运行时权限探索

引言:去年Android 6.0发布后,其新引入的(Requesting Permissions at Run Time)运行时权限就备受开发者关注,随着今年国内手机厂商对6.0系统的普及,觉得大家有必要了解下这个新特性,因为在TargetSDK23+进行开发不注意这些会造成APP运行在6.0+手机上崩溃,这篇博文将对这个新特性进行探索。 在之前的SDK开发中,如果需要用到一些权限例如打电话,发

李济洲的博客 1万+

Android 运行时权限申请之电话权限(兼容6.0以上)

Android 运行时权限申请之电话权限(兼容6.0以上) 运行时权限的申请一般是危险权限的申请,在android 6.0以后,所有的危险权限都需要用户手动的确认是否开启。下面图片是所有的危险权限。不必牢记,需要用的时候直接查询即可。本文来看电话权限的申请。 1.首先在AndroidManifest.xml中申明权限 <!--拨打电话权限--> <uses-permission...

u014714188的博客 8018

Android 运行时权限获取-PermissionsDispatcher

前段时间在写着玩时用到了一个定位的库,但却总没能成功获取到地理位置,反而换了部手机却又可以了。想到两部手机的版本定位不了的是6.0的,而另一部是4.4的,所以应该是权限没有。查看日志后也确是如此,为此就记录一下关于6.0(api 23)之后的运行时权限的获取问题。虽然这个很早就有了,但是仍有部分应用其实还是没有对此做处理的。本篇是以一个开源库PermissionsDispatcher的使用来写这篇学

一朝天子一朝陈的博客 3891

Android6.0运行时权限

一、运行时权限所谓运行时权限,指的是在Android6.0及以上版本中,在app运行时才请求相关权限,从而让每项权限都在用户知情的情况下被授权(当然用户可以拒绝)。而不同于Android6.0之前在安装app时告知用户获取全部权限。 关于权限,分为正常权限(一般和设备相关)、危险权限(用户数据相关)和特殊权限。具体可见https://developer.android.com/guide/topi

如故 3889

android 6.0 运行时权限框架

android 6.0 有些危险权限需要运行时手动获取才能继续执行应用,否则将出来很多崩溃问题android提供了API可以在运行时获取权限,但是要用到权限的页面比较多,这样就要在每个页面写着几个方法来判断权限,其实可以用封装好的权限框架来解决这个问题。网上有很多权限框架比如(PermissionGen)(MPermissions)这些框架都封装的很好,这里我为大家介绍的这个框架(EasyPermission)这款框架只有一个类,同样解决了以上问题,代码量很少,很容易读懂学习。在此分享出来供大家学习。

sinat_23134455的专栏 5536

Android6.0运行时权限处理

Android6.0运行时权限概述今天在开发中遇到读取app缓存文件的时候,在6.0系统上直接空异常,查看了manifest配置,其中也加入了相关的权限,于是想到Android 6.0的新特性。对于6.0的几个主要的变化,查看查看官网的这篇文章http://developer.android.com/intl/zh-cn/about/versions/marshmallow/android-6.0-

Wman 2319

Android6.0运行时权限解决方案

Android中单点登录的一种解决方案前提:服务端用户系统已集成token监听被踢下线的方式 任意请求返回token失效 在任意一个http请求中后台返回特定的code:与用户相关的http请求往往需要带上token,当token过期或者对应的账户在另一处登录时,后台返回预先预定好的code,Android端在网络层对code进行判断(可在网络层基类model统一处理) 第三方api的全局监听器 如

时间会走,可我不会 1901

Android动态获取6.0权限--运行时权限

运行时权限先给大家看下效果图吧 安卓 先给大家看下效果图吧

小口口的博客 391

Android 6.0 运行时权限详解

一. 运行时权限 运行时权限是 Android 6.0 开始引入的,这一特性不仅增加了应用的安全性,同时又改善了用户的使用体验。 二. Android 6.0 之前权限处理 在 Android 6.0 以前的系统,运行时权限仅当设置targetSdkVersion 等于 23才起作用。 在 Android6.0 之前的设备依然使用旧的权限系统。权限处理通过很粗暴的方式处理,Ap...

Luckcat 991
上一篇: 详解Android中获取SD卡和内存的空间信息
下一篇: 详解Android中图片轮播
Code_legend
博客等级 码龄10年 33粉丝 30原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值