Разрешение. READ_CONTACTS, похоже, не работает - PullRequest
16 голосов
/ 12 ноября 2011

Я работаю над простым приложением, которое просматривает контакты пользователя.К сожалению, я продолжаю получать следующую ошибку:

java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.HtcContactsProvider2 uri content://com.android.contacts/contacts from pid=27455, uid=10171 requires android.permission.READ_CONTACTS

Мой файл манифеста выглядит так:

<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.helloMaps"
    android:versionCode="1"
    android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />   
    <application android:icon="@drawable/icon" 
        android:label="@string/app_name" 
        android:debuggable="true">
        <uses-library android:name="com.google.android.maps" />
        <activity android:name=".MapsActivity"
                  android:label="@string/app_name"
                  android:theme="@android:style/Theme.NoTitleBar">            
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>
    </application>
</manifest>

Я пытаюсь просмотреть свои контакты по:

 Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);  

Я пытался добавить <uses-permission android:name="android.permission.READ_CONTACTS" /> или android:permission="android.permission.READ_CONTACTS" к <application> или <activity>, но оба не работали.

У меня заканчиваются варианты, кто-нибудь знает, чтоЯ здесь скучаю?

Ответы [ 6 ]

16 голосов
/ 12 ноября 2011

<uses-permission> должен содержаться в элементе <manifest>. См. Структура файла манифеста . Поэтому попытка поместить его в <application> или <activity> не сработает. Отчаянное движение: попытайтесь переместиться <uses-sdk> до <application>

<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.READ_CONTACTS" />

Также, если вы можете тестировать без других разрешений, удалите их.

РЕДАКТИРОВАТЬ: Можете ли вы проверить, является ли это вашей верхней строкой в ​​файле манифеста:

<?xml version="1.0" encoding="utf-8"?>
9 голосов
/ 24 апреля 2016

Я полностью застрял на этом, пока не прочитал эту статью о том, как обрабатываются разрешения, начиная с SDK 23. Критический совет:

Если для targetSdkVersion приложения установлено значение меньше 23. Предполагается, что приложение еще не протестировано с новой системой разрешений и переключится на то же старое поведение: пользователь должен принять каждое разрешение во время установки, и они будут все будет предоставлено после установки!

Я открыл свой gradle.build файл и изменил targetSdkVersion 23 на targetSdkVersion 22, и теперь все отлично работает! В конце концов я найду время, чтобы встроить новую систему разрешений и переключиться обратно на targetSdkVersion 23, что, вероятно, является более правильным ответом. Это временный ярлык.

4 голосов
/ 11 мая 2017

Ничего из вышеперечисленного не помогло.Решение довольно простое.вам потребуется запрос разрешения во время выполнения.

с указанием разрешения в вашем манифесте или без него. Вам потребуется запросить это разрешение у пользователя на лету. if( getApplicationContext().checkSelfPermission( Manifest.permission.READ_CONTACTS ) != PackageManager.PERMISSION_GRANTED ) ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CONTACTS}, resultValue);

только тогда, после утверждения, вы сможете запросить контактный номер телефона / имя и т. Д.

4 голосов
/ 17 августа 2016

Попробуйте это в вашем методе создания

ActivityCompat.requestPermissions (this, новая строка [] {Manifest.permission.READ_CONTACTS}, 1);

3 голосов
/ 18 апреля 2015

У меня была та же проблема, и ни одно из прочитанных мной решений не помогло решить ее, пока я не добавил разрешение WRITE_EXTERNAL_STORAGE вместе с разрешением READ_CONTACTS.

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
0 голосов
/ 11 марта 2014

Я столкнулся с этой проблемой сегодня, и ни одно из вышеперечисленных исправлений не сработало для меня.

В чем заключалась проблема, связанная с моим Eclipse.То, что я написал в manifest.xml и что было на вкладке Permissions, не было одинаковым.У меня было разрешение READ_CONTACTS в моем manifest.xml, но READ_PROFILE было в его месте под вкладкой моего разрешения.

Я знаю, что это старая ветка, но, надеюсь, если у кого-то возникла такая же проблема, я сделалони наткнуться на это.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...