也许您可以帮助我找出造成问题的原因...
我有一个简单的应用程序,该应用程序在用户单击按钮后添加了新联系人。
但是我有一个错误:
Caused by: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2 from ProcessRecord{49af1fb 14363:com.example.gszczepanski.eduandroid/u0a59} (pid=14363, uid=10059) requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS
at android.os.Parcel.readException(Parcel.java:1599)
at android.os.Parcel.readException(Parcel.java:1552)
at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:3550)
at android.app.ActivityThread.acquireProvider(ActivityThread.java:4778)
at android.app.ContextImpl$ApplicationContentResolver.acquireProvider(ContextImpl.java:1999)
at android.content.ContentResolver.acquireProvider(ContentResolver.java:1421)
at android.content.ContentResolver.insert(ContentResolver.java:1225)
at com.example.gszczepanski.eduandroid.ContactDetailsActivity.addNewContact(ContactDetailsActivity.java:54)
at com.example.gszczepanski.eduandroid.ContactDetailsActivity.addContact(ContactDetailsActivity.java:24)
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
即使我在Android Manifest文件中声明了读取和写入联系人权限,也可以:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.gszczepanski.eduandroid">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ContactDetailsActivity"
android:label="@string/title_activity_contact_details"
android:theme="@style/AppTheme.NoActionBar"></activity>
</application>
</manifest>
我想也许我在方法代码中声明了错误?这里是:
private void addNewContact(UserContactData contactData){
String name = contactData.getFirstName() + " " + contactData.getLastName();
ContentValues values = new ContentValues();
values.put(ContactsContract.Data.RAW_CONTACT_ID, 001);
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, contactData.getPhoneNumber());
values.put(ContactsContract.CommonDataKinds.Phone.LABEL, name);
values.put(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, name);
values.put(ContactsContract.CommonDataKinds.Phone.DATA1, contactData.getEmailAddress());
getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
}
我将不胜感激。
最佳答案
对于Android 6.0或更高版本,您必须在运行时向用户询问一些权限(可以访问用户的私人数据)。
See this: Requesting Permissions at Run Time
关于android - 即使在Android list 中声明了Android联系人权限也被拒绝,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35502184/