zoukankan      html  css  js  c++  java
  • 关于sdk>=23的android版本权限的问题

    在SDK23也就是Android6.0.1里编写调用系统通讯录读写权限的程序,在AndroidManifest.xml中,已经配置了

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

    但是运行中仍然出现异常,如下所示:

    java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2 from ProcessRecord (pid=28104, uid=10176) requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS

    原因是SDK23对应用程序权限做出了改动,有两种解决办法:
    ①使用SDK22开发,并且运行此程序的android虚拟机或者是手机的系统6.0以下。

    ②使用ContentResolver之前,加入如下代码,进行权限校验。
    首先进行REQUESTCode:REQUEST_CODE_ASK_PERMISSONS常量的声明。

    final private int REQUEST_CODE_ASK_PERMISSIONS = 123;

    然后再调用ContentResolver之前,进行权限校验

    int hasWriteContactsPermisson = checkSelfPermission(
    android.Manifest.permission.READ_CONTACTS);
    if(hasWriteContactsPermisson != 
        PackageManager.PERMISSION_GRANTED)
    {
        requestPermissions(new String[]
            {Manifest.permission.WRITE_CONTACTS},
            REQUEST_CODE_ASK_PERMISSIONS);
    
        return;
    }
    //使用ContentResolver查找联系人数据
    Cursor cursor = getContentResolver().query(
        ContactsContract.Contacts.CONTENT_URI,
        null,null,null,null);

    在小米手机上,运行结果:

    这里写图片描述

    参考更详细的说明http://blog.csdn.net/xietansheng/article/details/54315674

  • 相关阅读:
    虚函数中的变量作用域问题
    C++技能重拾2
    C++技能重拾
    位运算取第一个非0的位 r & (~(r-1))
    ThoughtWorks微服务架构交流心得
    字符串匹配的sunday算法
    Codeforces Round #270(利用prim算法)
    HDFS建筑与shell操作
    Spark SQL 源代码分析系列
    HDU 4686 Arc of Dream(递归矩阵加速)
  • 原文地址:https://www.cnblogs.com/scarecrow-blog/p/7728697.html
Copyright © 2011-2022 走看看