zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    替代PhotoShop:GIMP图形编辑器的使用
    Matlab: 主函数和子函数间接传递变量
    代码管理:SVN的使用
    Python: 科学计算
    Python: 代码调试
    Latex: article模板
    Matlab: 程序优化和调试
    LibreOffice的使用技巧
    mysql--多表联合查询
    mysql--数据查询
  • 原文地址:https://www.cnblogs.com/Ayinger/p/10968658.html
Copyright © 2011-2022 走看看