Permission.READ_CONTACTS, похоже, не работает
Я работаю над простым приложением, которое просматривает контакты пользователя. К сожалению, я продолжаю получать следующую ошибку:
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>
, но оба они не работали.
У меня заканчиваются варианты, кто-нибудь знает, что мне здесь не хватает?
Ответы
Ответ 1
<uses-permission>
должен содержаться в элементе <manifest>
. См. Структура файла манифеста. Поэтому попытка поместить его в <application>
или <activity>
не будет работать. Движение отчаяния: попробуйте переместить <uses-sdk>
до <application>
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
Также, если вы можете протестировать без других разрешений, удалите их.
EDIT: можете ли вы проверить, является ли это вашей верхней линией в файле манифеста:
<?xml version="1.0" encoding="utf-8"?>
Ответ 2
Я был полностью застрял в этом, пока не прочитал эту статью о том, как обрабатывать разрешения, начиная с SDK 23. Критический намек:
Если для приложения targetSdkVersion установлено значение меньше 23. Предполагается, что приложение еще не протестировано с новой системой разрешений и переключится на прежнее поведение: пользователь должен принимать все разрешения во время установки, и они будут все предоставленные после установки!
Я открыл файл gradle.build
и изменил targetSdkVersion 23
на targetSdkVersion 22
, и теперь все работает отлично! В итоге я найду время для создания новой системы разрешений и вернусь к targetSdkVersion 23
, что, вероятно, является более правильным ответом. Это временный ярлык.
Ответ 3
У меня была та же проблема, и ни одно из прочитанных нами решений не помогло разрешить ее, пока я не добавил разрешение WRITE_EXTERNAL_STORAGE
вместе с разрешением READ_CONTACTS
.
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Ответ 4
Попробуйте это в своем методе создания
ActivityCompat.requestPermissions(это новая строка [] {Manifest.permission.READ_CONTACTS}, 1);
Ответ 5
Ничего из этого не помогло. Решение довольно простое.
вам понадобится запрос разрешения времени выполнения.
с предоставлением разрешения или без него в манифесте, вам нужно будет запросить это разрешение у Пользователя на лету.
if( getApplicationContext().checkSelfPermission( Manifest.permission.READ_CONTACTS ) != PackageManager.PERMISSION_GRANTED )
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CONTACTS}, resultValue);
только после утверждения вы сможете запросить номер телефона телефона/имя и т.д.
Ответ 6
Сегодня я столкнулся с этой проблемой, и ни одна из вышеперечисленных исправлений не работала для меня.
Какая проблема была связана с моим Eclipse. То, что я написал в manifest.xml
, и то, что было на вкладке Permissions
, не было одинаковым. У меня было разрешение READ_CONTACTS
в моем manifest.xml
, но READ_PROFILE
находилось в нем на моей вкладке с правами.
Я знаю, что это старый поток, но, надеюсь, если у кого-то будет такая же проблема, я бы наткнулся на это.
Спасибо!