• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android6.0权限管理

Android6.0权限管理

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android6.0申请权限,android6.0权限,android6.0权限问题,android6.0动态权限,android6.0新特性等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android6.0权限管理


Android 6.0 Marshmallow首次加入了运行时权限管理,这对用户来说,可以更好的了解、控 制 app 涉及到的权限。然而对开发者来说却是一件比较蛋疼的事情,需要兼容适配,并保证程序功能的正常运行。
什么叫运行时权限管理呢?在Android 6.0以下的系统中,当我们在安装应用的时候,该应用就会提示我们这个应用所需要的权限,如果你要安装,那就必须同意赋予所有权限,但是如果不同意,那就只能取消安装了,有点流氓。而且安装完后,你不可以收回这个权限。
而6.0就做到了运行时权限管理,即使安装的时候给了权限,也可以到系统设置里,去关闭该权限。
下面分几种情况来讲,因为运行时权限只有在Android6.0及以上的手机版本才有,所以这里只考虑设备版本大于6.0的手机,低版本的手机在安装时就已经赋予了所有的权限,也不可能收回,就不考虑了,下面的情况只分targetSdkVersion:

targetSDKVersion大于等于23的时候,那么权限是可以被回收(revoke),这里还要分权限,google将权限分为两种,一种是normal permission,另一种是dangerous permission。normal permission是指与用户隐私无关的权限,可以理解为无关紧要的权限,比如说访问网络的权限,对用户来说没什么关系;dangerous permission就是会涉及到用户隐私的权限,例如读取用户手机联系人、短信等等。如果是normal permission的话,那么在安装的时候就会给,而且不会开放接口让用户回收该权限,app会一直拥有该权限,所以不用考虑这种类型的权限。如果是dangerous permission的话,在安装的时候并未授予权限,系统开放接口允许用户回收或者赋予权限。下面是某个应用的权限,第一张图是dangerous permission,可以回收和赋予的。
这是dangerous permission
点击上面的所有权限,可以查看到该应用所有的权限。
这是所有的权限,包括normal and dangerous
那么对于dangerous permission的话,在使用前需要去检查该permission是否已经被授予
checkSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED

如果该权限已经被授予,那么可继续执行你的代码,如果未授予,则需要向用户询问是否需要授予权限,弹出的框是系统界面,界面如下:
这里写图片描述
调用代码:

requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 1);

系统询问是否授予权限的页面结束后会有回调

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
   super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 1) {
        if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
            //your implementations
        }else{
            ToastUtil.show(this, "权限不足,支付失败");
        }
    }
}
如果targetSdkVersion是小于23的,那么将认为app没有用23新权限测试过,那么继续使用老规则:系统在安装的时候会默认给app赋予所有的权限,app可以照常运行。但是!但是!但是!用户依然可以回收权限,不过此回收非彼回收。先看下关闭权限时弹的页面:
这里写图片描述
看到了么,如果targetSDKVersion小于23的话,在关闭权限的时候,会弹一个警告框,告诉你这是旧版的android,关闭会有问题,如果你按拒绝,那么该权限将会关闭,而且界面上,权限的开关会显示关,但是这个权限却没有被回收(nexus 5x的手机亲测,当然其他的机子我也不敢打包票)。比如说我旧版的app,targetSDKVersion也少于23,然后将该app跑在6.0的手机上,并且在设置里将权限给关闭,重新跑该app,发现其并不会崩溃,在运行到checkSelfPermission的时候,发现某个权限明明已经被关闭,但是这个函数却返回告诉说该权限被赋予,这不是见鬼了么,而且这个权限也能被正常使用。上网搜了一把,这种情况很多,但是网上的人情况不同,有些是关闭权限,checkSelfPermission返回granted,但是使用权限的时候,就抛出异常。
后来也有人说看系统日志的,我看了下,如果targetSDKVersion等于23的话,系统日志是:
这里写图片描述vcu1t6ijrLK7uf3T0NCpyMvLtXRhcmdldFNES1ZlcnNpb27QodPaMjO1xGFwcKOs1rvE3M2ouf3QttTY06bTw7LFxNzK1bvYyKjP3qOs1eLQqbLCz+vJ0M601qTKtaGjPC9wPg0KPHA+u7nT0L7NysfIqM/etcS7sKOs09C31tfptcS4xcTuo6y/tMjnz8LNvKO6PGJyIC8+DQo8aW1nIGFsdD0="这里写图片描述" src="http://www.bkjia.com/uploads/allimg/160403/041934B51-5.png" title="" />
如果一组中有一个被授予了,那么组内的也会默认被授予。

而且也支持同时申请多个权限,具体情况android developer官网。

下面是stackoverflow问题的网址:
http://stackoverflow.com/questions/36328151/ive-revoke-the-android-permission-but-checkselfpermission-still-return-granted

如有问题和错误的地方请指出。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android6.0权限管理

相关文章

  • 2017-05-26Xamarin Android 应用程序内图标上数字提示,xamarinandroid
  • 2017-05-26Android开发之初识MVP模式
  • 2017-05-26Android 如何有效的解决内存泄漏的问题,android泄漏
  • 2017-05-26阅读《Android 从入门到精通》(29)——LinearLayout 等四类方法
  • 2017-05-26Android客户端性能优化(魅族资深工程师毫无保留奉献)
  • 2017-05-26Android开发文档翻译之-Services
  • 2017-05-26错误提示”void is an invalid type for the variable“,invalidvariable
  • 2017-05-26我的android学习经历10,android学习经历10
  • 2017-05-26手游助手应用源码项目,游助手源码项目
  • 2018-01-28android单选按钮RadioGroup的详细使用

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • android实现无限轮播,android实现轮播
    • 手机IMEI获取,imei获取
    • VMware中ubuntu忘记密码的解决办法(转)
    • android环境下的即时通讯,android即时通讯
    • Android窗口机制分析与UI管理系统,androidui
    • Android逆向之旅---解析编译之后的Resource.arsc文件格式
    • tcpdump的移植和使用方法
    • Android之Activity系列总结(一)--Activity概览,android--activity
    • Android UI相关开源项目库汇总,android开源项目
    • redis lru实现策略

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有