Marshmallow权限使用
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();
}
参考
《架构文摘》每天一篇架构领域重磅好文,涉及一线互联网公司应用架构(高可用、高性 能、高稳定)、大数据、机器学习等各个热门领域。
Marshmallow权限使用的更多相关文章
- Android 6.0 运行时权限处理完全解析
一.概述 随着Android 6.0发布以及普及,我们开发者所要应对的主要就是新版本SDK带来的一些变化,首先关注的就是权限机制的变化.对于6.0的几个主要的变化,查看查看官网的这篇文章http:// ...
- Android M(6.0) 权限相关
原文链接:http://jijiaxin89.com/2015/08/30/Android-s-Runtime-Permission/ Android M 新的运行时权限开发者需要知道的一切 an ...
- 谈谈Android 6.0运行时权限理解
前言 谷歌在2015年8月份时候,发布了Android 6.0版本,代号叫做“棉花糖”(Marshmallow ),其中的很大的一部分变化,是在用户权限授权上,或许是感觉之前默认授权的不合理,现在6. ...
- Android 6.0权限全面详细分析和解决方案
原文: http://www.2cto.com/kf/201512/455888.html http://blog.csdn.net/yangqingqo/article/details/483711 ...
- Android M新的运行时权限开发者需要知道的一切
android M 的名字官方刚发布不久,最终正式版即将来临!android在不断发展,最近的更新 M 非常不同,一些主要的变化例如运行时权限将有颠覆性影响.惊讶的是android社区鲜有谈论这事儿, ...
- API23时权限不被许可
In Android 6.0 Marshmallow, application will not be granted any permission at installation time. Ins ...
- Android 6.0的运行时权限
原文 http://droidyue.com/blog/2016/01/17/understanding-marshmallow-runtime-permission/ 主题 安卓开发 Andr ...
- Android 6.0权限
在android 6.0 Marshmallow版本之后,系统不会在软件安装的时候就赋予该app所有其申请的权限,对于一些危险级别的权限,app需要在运行时一个一个询问用户授予权限. 只有那些targ ...
- Android PermissionChecker 权限全面详细分析和解决方案
原文: http://www.2cto.com/kf/201512/455888.html http://blog.csdn.net/yangqingqo/article/details/483711 ...
随机推荐
- Flink 源码解析 —— TaskManager 处理 SubmitJob 的过程
TaskManager 处理 SubmitJob 的过程 https://t.zsxq.com/eu7mQZj 博客 1.Flink 从0到1学习 -- Apache Flink 介绍 2.Flink ...
- vmware中设置ubuntu静态ip
概括一下过程中遇到的三个问题: 1.如何修改虚拟机为静态ip并且生效 2.设置完静态ip后,无法上网 3.设置完静态ip且能上网后,宿主机无法ping通虚拟机 问题1:参考https://www.ji ...
- HDU-3038How Many Answers Are Wrong权值并查集
How Many Answers Are Wrong 题意:输入一连串的区间和,问和前面的矛盾个数: 思路:我在做专题,知道是并查集,可是还是不知道怎么做,学了一下权值并查集和大佬的优秀思路,感觉回了 ...
- POJ-1469 COURSES ( 匈牙利算法 dfs + bfs )
题目链接: http://poj.org/problem?id=1469 Description Consider a group of N students and P courses. Each ...
- nvm 管理多个活动的node.js版本
前序:最近在使用taro框架开发小程序,因为安装taro时遇到一些问题,后来重新安装了node版本——v10.16.3,却影响了我本地开发的项目,故此使用nvm来管理node的版本,更加灵活的切换以支 ...
- 【Spring】AOP注解方式实现机制
一.概述 二.@EnableAspectJAutoProxy 注解分析 三.分析AnnotationAwareAspectJAutoProxyCreator 四.执行流程 1. registerBea ...
- TypeScript模块系统、命名空间、声明合并
命名空间 命名空间能有效避免全局污染.在ES6引入模块之后,命名空间就较少被提及了.如果使用了全局的类库,命名空间仍是一个好的解决方案. namespace Shape{ const pi = Mat ...
- .Net基础篇_学习笔记_第六天_For循环语法
For循环:专门处理已知循环次数的循环. 小技巧:连续敲击两下TAB键循环体自动搭建完成. For循环语法: for(表达式1;表达式2;表达式3){ 循环体;}表达式1一般为声明循环变量,记录循环 ...
- unittest核心要素
1 TestCase 一个TestCase的实例就是一个测试用例.什么是测试用例呢?就是一个完整的测试流程, 包括测试环境的准备(setUp),执行测试代码(run),以及测试后环境的还原(tearD ...
- airflow使用SimpleHttpOperator实现http调用任务
使用SimpleHttpOperator作为处理器的时候,会发现默认访问的地址www.google.com端口为443 例如下面这样定义的任务 task = SimpleHttpOperator( t ...