我的编程空间,编程开发者的网络收藏夹
学习永远不晚

谈谈Android6.0运行时的权限处理

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

谈谈Android6.0运行时的权限处理

运行时权限介绍

Android 6.0在我们原有的

AndroidManifest.xml
声明权限的基础上,

又新增了运行时权限动态检测,以下权限都需要在运行时判断:

     1、身体传感器

     2、日历

     3、摄像头

     4、通讯录

     5、地理位置

     6、麦克风

     7、电话

     8、短信

     9、存储空间

在 Android 6.0 中,app 如果想要获得某些权限,会在应用中弹出一个对话框,让用户确认是否授予该权限。

具体的截图如下:

这要做的好处就是运行一个 app 时可以拒绝其中的某些权限,防止 app 触及到你的隐私(比如说通讯录、短信之类的)。而在 Android 6.0 之前,若同意安装 app ,就意味着该 app 可以获取权限列表中的所有权限。(注:这里所指的都是原生 Android 系统,比如 MIUI 之类的第三方 ROM 很早就具备了这种功能。)

接下来就来看看相关的 API 吧,首先我们来看看

Context.checkSelfPermission(String permission) 
方法,该方法主要用于检测该 app 是否已经被赋予了某权限,传入的参数有。如果已被赋予,则返回
PERMISSION_GRANTED 
,否则返回
PERMISSION_DENIED 

若返回了

 PERMISSION_DENIED 
,那么我们就要去申请该权限了。这时就要用到
Activity.requestPermissions(String[] permissions, int requestCode) 
这个方法了。顾名思义,该方法的作用就是申请某些权限了。第一个参数就是要申请的权限,可以看到参数形式是一个数组,也就是说可以一次申请多个权限。而第二个参数就是申请权限的代号,主要用于在之后的回调中选择。

当用户在权限申请的对话框中作出选择后,就会回调

onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults) 
方法。

     第一个参数就是上面的权限代号;

     第二个参数是申请的权限数组;

     第三个参数就是权限申请的结果。

结合上面的几个方法,可以写出如下所示的权限申请代码模版:


public static final int READ_CONTACTS_REQUEST_CODE = 101;
// 如果权限没有被授予
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_CONTACTS) !=
 PackageManager.PERMISSION_GRANTED) {
 // 申请权限
 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, READ_CONTACTS_REQUEST_CODE);
} else {
 // TODO 权限已经被授予
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
 super.onRequestPermissionsResult(requestCode, permissions, grantResults);
 switch (requestCode) {
 case READ_CONTACTS_REQUEST_CODE:
  if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  // TODO 用户已经授予了权限
  } else {
  // TODO 用户拒绝授予权限
  }
  break;
 }
}

在这里,还有一个方法需要注意下,那就是

shouldShowRequestPermissionRationale (Activity activity, String permission)
方法。这个方法的作用就是当用户拒绝了某个权限之后,下一次就会显示出需要该权限的说明。

关于运行时申请权限基本就这样了,值得提醒的是,并不是所有的权限都需要运行时申请,只有“危险”的权限才通过运行时来申请。比如说读取联系人、获取位置信息、读写SD卡等等都为“危险权限”,而比如振动、联网、蓝牙等就是普通权限了,就不需要运行时申请了。

说完了运行时申请权限后,另外还有一点需要注意的是,在 Android 6.0 显示悬浮窗也有一个“坑”。如果调用平常的显示悬浮窗的方法,会抛出 “permission denied for this window type” 异常。解决的方案就是在显示悬浮窗之前,需要调用一下

Settings.canDrawOverlays(context) 这
个方法。若该方法返回 true ,则说明用户同意创建悬浮窗;否则可以跳转到相关的设置页面。具体的代码模版如下:


if (Build.VERSION.SDK_INT >= 23) {
 if (Settings.canDrawOverlays(context)) {
 // 显示悬浮窗
 } else {
 // 跳转到相关的设置页面
 Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
 startActivity(intent);
 }
} else {
 // 版本低于Android 6.0,直接显示悬浮窗
}

总结

好了,就到这里吧,以上就是Android6.0运行时的权限处理的全部问题,希望这篇文章对大家开发Android能有所帮助。

您可能感兴趣的文章:Android 操作系统获取Root权限 原理详细解析Android获取ROOT权限的实例代码Android权限控制之自定义权限Android中Root权限获取的简单代码Android需要提升权限的操作方法android编程判断应用是否具有某个权限的方法Android无需申请权限拨打电话的两种方式Android用代码获取手机root之后的最高权限Android 手动获取判断处理权限Android辅助权限的介绍和配置完整记录


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

谈谈Android6.0运行时的权限处理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

谈谈Android6.0运行时的权限处理

运行时权限介绍Android 6.0在我们原有的AndroidManifest.xml声明权限的基础上,又新增了运行时权限动态检测,以下权限都需要在运行时判断: 1、身体传感器 2、日历 3、摄像头 4、通
2022-06-06

详解Android6.0运行时权限管理

自从Android6.0发布以来,在权限上做出了很大的变动,不再是之前的只要在manifest设置就可以任意获取权限,而是更加的注重用户的隐私和体验,不会再强迫用户因拒绝不该拥有的权限而导致的无法安装的事情,也不会再不征求用户授权的情况下,
2022-06-06

浅谈一下Servlet的定义以及运行原理

相信有很多刚入行的朋友会疑惑Servlet到底是个什么意思,那么这篇文章就来浅谈一下到底什么是Servlet,以及Servlet的原理与如何写一个Servlet,,需要的朋友可以参考下
2023-03-24

如何使bat批处理以管理员权限运行

这篇文章给大家分享的是有关如何使bat批处理以管理员权限运行的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、第一种方法有的电脑是非管理员登录,运行程序时,需要提示是否运行运行。解决方法如下:@ echo off
2023-06-08

详解Android权限管理之Android 6.0运行时权限及解决办法

前言:今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以上设备越来越多了,所以Android 6.
2022-06-06

windows以管理员权限运行命令的方法介绍

Windows以管理XTcOWyUz员权限运行命令 Cmd代码 C:\Program Files XTcOWyUz(x86)\360\360Safe\hotfix>runas / profile /user:Administrator "c
2023-05-26

ODBC连接Oracle时遇到权限问题的处理

在ODBC连接Oracle时遇到权限问题,主要可能是由于以下几种原因导致的:用户没有足够的权限访问所需的数据库对象。ODBC连接字符串中的用户名或密码不正确。数据库端的权限设置不正确。要解决权限问题,可以按照以下步骤进行操作:确保用户名
ODBC连接Oracle时遇到权限问题的处理
2024-07-15

Win8、win8.1中用管理员权限运行cmd的方法图文教程

cmd运行命令可以帮助解决很多问题,可以查看系统本地很多信息,本文介绍在win8系统下如何使用管理员权限运行cmd! 有三种方法,其实都很简单,对电脑一些功能区域比较熟悉的一看便能明白! 方法一:1、按win键+R打开运行,下图为win键。
2022-06-04

MongoDB中怎么处理长时间运行的事务

在MongoDB中,长时间运行的事务可以通过使用分布式事务来处理。MongoDB支持多种事务类型,包括单文档事务和多文档事务。对于长时间运行的事务,可以使用MongoDB的事务管理功能来确保事务的完整性和一致性。在创建事务时,可以设置事务
MongoDB中怎么处理长时间运行的事务
2024-04-19

C++程序运行时异常处理是怎样的

这篇文章主要介绍“C++程序运行时异常处理是怎样的”,在日常操作中,相信很多人在C++程序运行时异常处理是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++程序运行时异常处理是怎样的”的疑惑有所帮助!
2023-06-17

详解Android数据存储之Android 6.0运行时权限下文件存储的思考

前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以往直接sdcard根目录上直接新建了一个
2022-06-06

Jenkins执行远程Windows批处理遇到的权限问题有哪些

这篇文章给大家分享的是有关Jenkins执行远程Windows批处理遇到的权限问题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Jenkins构建Windows批处理时可能会遇到访问权限的问题,导致无法执行
2023-06-04

Android SurfaceView运行机制剖析--处理切换到后台再重新进入程序时的异常

有不少朋友都遇到过这种问题,程序执行时切换到后台,然后再重新进入会报异常,本文就这种问题全面讲解下SurfaceView的运行机制,了解了这些原理你就能自己解决这些问题了。 我们通常会通过单击HOME按键或返回
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录