Google发布Android 6.0后对用权限的控制更加严格,在Android5.1或更低的版本中用户能在App的安装期间或使用设置应用程序权限来同意或拒绝某个权限,而在Android6.0或更高的版本中除了可以向上面说明的那样处理权限还可以在App任意运行期间请求权限。

Android权限

Android将权限分为normal和dangerous两类。

Normal权限

简单的来说这个这个级别的权限只会对用户的隐私和设备造成很小的影响如INTERNET、ACCESS_NETWORK_STATE等权限。如果你在Manifest中声明多个Normal权限,Android会在App安装期间自动的通过这些Normal权限请求,Android不会提示用户Normal权限且用户不能移除那些权限。

Dangerous权限

如果App需要的数据或资源涉及到用户的私有数据如READ_CONTACTS、READ_SMS等权限。Dangerous权限需要用户显示的同意。

检查权限

在Android6.0或更高的系统中权限的处理可以在任何APP运行期间,Android已经提供的兼容库并包含一系列的方法去处理权限。注意权限还是要在Manifest中声明的。

    <uses-permission android:name="android.permission.READ_SMS"></uses-permission>

以上声明APP需要读SMS权限,在APP安装后Android6.0或更高的版本中这些权限可能默认都是不允许的。为兼容新的Andorid系统应该在读和发送SMS时先检查是否有READ_SMS权限。

    int isGranted = ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_SMS);
if(PackageManager.PERMISSION_GRANTED == isGranted){
readSms();
}

以上代码检查是否有READ_SMS权限,如果有则读取短信。

请求权限

当通过上面的checkSelfPermission方法返回PackageManager.PERMISSION_DENIED 表示当前还没有READ_SMS权限需要去手动请求权限。

 final int   READ_SMS_PERMISSION = 0x1;
public void requestSmsPermission(View view){ final String[] permissions = new String[]{
android.Manifest.permission.READ_SMS,
}; ActivityCompat.requestPermissions(this, permissions, READ_SMS_PERMISSION); }

调用requestPermissions方法系统会弹出Dialog询问用户是否同意该权限。

处理权限响应

用户对APP权限的请求做出响应后,系统会调用Activity的onRequestPermissionsResult方法。

    @Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults); if(requestCode == READ_SMS_PERMISSION && grantResults[0] == PackageManager.PERMISSION_GRANTED)
readSms();
}

参考

Normal权限列表

权限组

Permissions Best Practices



《架构文摘》每天一篇架构领域重磅好文,涉及一线互联网公司应用架构(高可用、高性 能、高稳定)、大数据、机器学习等各个热门领域。

Marshmallow权限使用的更多相关文章

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

    一.概述 随着Android 6.0发布以及普及,我们开发者所要应对的主要就是新版本SDK带来的一些变化,首先关注的就是权限机制的变化.对于6.0的几个主要的变化,查看查看官网的这篇文章http:// ...

  2. Android M(6.0) 权限相关

    原文链接:http://jijiaxin89.com/2015/08/30/Android-s-Runtime-Permission/ Android M 新的运行时权限开发者需要知道的一切   an ...

  3. 谈谈Android 6.0运行时权限理解

    前言 谷歌在2015年8月份时候,发布了Android 6.0版本,代号叫做“棉花糖”(Marshmallow ),其中的很大的一部分变化,是在用户权限授权上,或许是感觉之前默认授权的不合理,现在6. ...

  4. Android 6.0权限全面详细分析和解决方案

    原文: http://www.2cto.com/kf/201512/455888.html http://blog.csdn.net/yangqingqo/article/details/483711 ...

  5. Android M新的运行时权限开发者需要知道的一切

    android M 的名字官方刚发布不久,最终正式版即将来临!android在不断发展,最近的更新 M 非常不同,一些主要的变化例如运行时权限将有颠覆性影响.惊讶的是android社区鲜有谈论这事儿, ...

  6. API23时权限不被许可

    In Android 6.0 Marshmallow, application will not be granted any permission at installation time. Ins ...

  7. Android 6.0的运行时权限

    原文  http://droidyue.com/blog/2016/01/17/understanding-marshmallow-runtime-permission/ 主题 安卓开发   Andr ...

  8. Android 6.0权限

    在android 6.0 Marshmallow版本之后,系统不会在软件安装的时候就赋予该app所有其申请的权限,对于一些危险级别的权限,app需要在运行时一个一个询问用户授予权限. 只有那些targ ...

  9. Android PermissionChecker 权限全面详细分析和解决方案

    原文: http://www.2cto.com/kf/201512/455888.html http://blog.csdn.net/yangqingqo/article/details/483711 ...

随机推荐

  1. 01_liteide 集成环境运行的问题

    //go语言是以包为管理单位 //每个文件必须先声明包 //程序必须有一个main包 package main import (  "fmt" ) //入口函数 func main ...

  2. 在.net core web项目中生成图片验证码

    第1步:添加SkiaSharp包引用 Install-Package SkiaSharp 第2步:编写生成图片验证码的代码 using SkiaSharp; //在类文件头部添加引用 public I ...

  3. STL中的map和multimap小结

    (1)使用map/multimap之前必须包含头文件<map>:#include<map> 并且和所有的关联式容器一样,map/multimap通常以平衡二叉树来完成    ( ...

  4. CF1025C Plasticine zebra 思维 字符串

    Plasticine zebra time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  5. Windows下安装youtube-dl(下载各大网站视频)

    youtube-dl干什么用的? 惯例,看官方介绍: youtube-dl is a command-line program to download videos from YouTube.com ...

  6. Docker详解(一)

    目录 Docker简介 Docker组成 永远的HelloWorld 序言:众所周知,近几年的互联网各项技术发展的如火如荼,敏捷开发模式越来越普及,"快"似乎成为了行业的标准,于是 ...

  7. framework7 picker 具体使用

    官网地址:https://framework7.io/docs/picker.html#dom-events <meta charset="UTF-8"> <me ...

  8. AOE工程实践-银行卡OCR里的图像处理

    作者:杨科 近期我们开发了一个银行卡 OCR 项目.需求是用手机对着银行卡拍摄以后,通过推理,可以识别出卡片上的卡号. 工程开发过程中,我们发现手机拍摄以后的图像,并不能满足模型的输入要求.以 And ...

  9. SpringBoot系列__01HelloWorld

    接触SpringBoot很久了,但是一直没有很深入的研究一下源码,最近重启了博客,顺便开始深入研究一下技术. 1.简介 参照官方文档的说法,SpringBoot的设计理念就是为了简化Java程序员搭建 ...

  10. TypeScript泛型

    泛型的概念 指不预先确定的数据类型,具体的类型要在使用的时候才能确定.咋一听,是不是觉得JavaScript本身就是这样?这是由于理解有误.前面说“在使用的时候确定”,而非在程序执行的时候确定. 泛型 ...