ContentProvider【java.lang.SecurityException: Permission Denial】异常解决

今天在使用ContentProvider过程中遇到 一个异常,在网上找了各种方法,但都不是我这个异常的解决方案,于是我搜啊搜,终于看到:http://m.blog.csdn.net/OREO_GO/article/details/52295099 完美解决了我的问题。


我的手机是小米note,版本是7.0以上

异常

Caused by: java.lang.SecurityException: Permission Denial: 
opening provider com.android.providers.contacts.ContactsProvider2 
from ProcessRecord{8e31224 29224:activity.gudd.com.review/u0a212} 
(pid=29224, uid=10212)
requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS
这个哥们呢说:
在SDK23也就是Android6.0.1里编写调用系统通讯录读写权限的程序,在AndroidManifest.xml中,已经配置了

但还是遇到了上面的异常。

原因是SDK23对应用程序权限做出了改动,有两种解决办法:

1.使用SDK22开发,并且运行此程序的android虚拟机或者是手机系统6.0以下。

2.使用ContentResolver之前,输入如下代码,进行权限校验。

首先进行REQUESTCODE: REQUEST_CODE_ASK_PERMISSIONS常量声明。


解决办法:

在使用ContentResolver之前,加入如下代码。

在开始前声明常量

final private int REQUEST_CODE_ASK_PERMISSIONS = 123;

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            int hasWriteContactsPermission = checkSelfPermission(Manifest.permission.READ_CONTACTS);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED){
                requestPermissions(new String[]{Manifest.permission.WRITE_CONTACTS},REQUEST_CODE_ASK_PERMISSIONS);
                return;
            }
        }

的确,我的问题解决了,并且提示出了是否让我读取联系人的对话框。

好了,可以继续做下面的活儿了。

你可能感兴趣的:(Exception)