当前位置: 首页 > news >正文

Android - 权限

背景介绍

今天做读取联系人信息的时候,出现了一个问题

但是明明已经添加了读取联系人权限,为什么还要让我添加权限,在网上查了一下,发现是因为权限问题。

系统权限主要分为两种,普通权限以及危险权限

普通权限:不会直接获取用户的隐私,如果manifest中声明了这些权限,系统会自动授予app这些普通权限。

危险权限:顾名思义,会获取用户隐私,如果你确实需要这些危险权限,用户必须在APP中,通过点击同意才能获取。(相机、位置、通讯录、短信等权限)

当用户手机的android系统为5.1及以下的系统,或者项目设置的targetSDK为22或者以下,那么所有的权限(普通和危险)都是在安装时候授权。但如果你的Android系统为6.0及以上并且targetSDK为23及以上,每一个危险的权限都必须在ap运行的时候逐一让用户点击同意或者拒绝。

所以我的程序崩溃的原因正好满足了以上三点:

 1.  TargetSdkVersion 为23以上

 2.  手机的操作系统为6.0以上

 3.  请求的是google定义的危险权限

解决办法是咋程序中检查是否授权,未授权则申请授权。

权限相关知识

其中,检查时候授权还有三种方式:

  •  ContextCompat.checkSelfPermission();被授权函数返回PERMISSION_GRANTED,否则返回PERMISSION_DENIED,在所有版本都是如此
  •  ActivityCompat.requestPermissions();这个方法在M(23)之前版本调用,onRequestPermissionResultCallback直接被调用,带着正确的PERMISSION_GRANTED或者RERMISSION_DENIED
  • ActivityCompat.shouldShowRequestPermissionRationate();这个方法检查是否需要展示请求权限的提示,如果为false,不展示,true展示

    1)    在M之前版本调用,永远返回false

    2)    第一次请求权限时,返回false

    3)    第一次请求权限被禁止,但未选择【不再提示】,返回true

    4)    允许权限后,返回false

    5)    禁止权限,并选择【不再提示】,返回false

另外:Fragment中也可以请求权限,效果和Activity一样。

FragmentCompat.requestPermissions()

FragmentCompat.shouldShowRequestPermissionRationate()

危险权限总结

参考博客

https://blog.csdn.net/njweiyukun/article/details/50044193?_t_t_t=0.6781663475894713

https://www.jianshu.com/p/e1ab1a179fbb

https://blog.csdn.net/wangpf2011/article/details/80589648

 

转载于:https://www.cnblogs.com/Ayinger/p/10968658.html

相关文章:

  • 跳石板_牛客网
  • Google浏览器插件
  • 第二阶段冲刺4
  • python篇第10天【For 循环语句】
  • React实战之将数据库返回的时间转换为几分钟前、几小时前、几天前的形式。...
  • 2、CDH组件安装
  • 第一章 Vue介绍
  • awk使用记录
  • (¥1011)-(一千零一拾一元整)输出
  • 第六章 组件 51 组件化和模块化的区别
  • 如何回答——请简述MySQL索引类型
  • WUSTOJ 1307: 校门外的树(Java)
  • 【java】查重类的实现
  • 解决Visual Studio 2017隐藏“高级保存选项”命令
  • 深入理解HashMap(JDK1.8)
  • [iOS]Core Data浅析一 -- 启用Core Data
  • CentOS7简单部署NFS
  • HTTP中的ETag在移动客户端的应用
  • Java超时控制的实现
  • java中的hashCode
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • node 版本过低
  • spring + angular 实现导出excel
  • vue总结
  • 阿里云购买磁盘后挂载
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端面试总结(at, md)
  • 前嗅ForeSpider采集配置界面介绍
  • 入手阿里云新服务器的部署NODE
  • 使用 QuickBI 搭建酷炫可视化分析
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • Python 之网络式编程
  • ​iOS安全加固方法及实现
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (2)(2.10) LTM telemetry
  • (33)STM32——485实验笔记
  • (Matlab)使用竞争神经网络实现数据聚类
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二)linux使用docker容器运行mysql
  • (接口封装)
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)iOS字体
  • .chm格式文件如何阅读
  • .net refrector
  • .NET Standard 的管理策略
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @TableLogic注解说明,以及对增删改查的影响
  • @开发者,一文搞懂什么是 C# 计时器!
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce