也许您可以帮助我找出造成问题的原因...
我有一个简单的应用程序,该应用程序在用户单击按钮后添加了新联系人。

但是我有一个错误:

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/

10-12 15:00
查看更多