web-dev-qa-db-fra.com

permission.READ_CONTACTS ne semble pas fonctionner

Je travaille sur une application simple qui parcourt les contacts de l'utilisateur. Malheureusement, je continue à avoir l'erreur suivante:

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

Mon fichier manifeste ressemble à ceci:

<?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>

J'essaie de regarder mes contacts en:

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

J'ai essayé d'ajouter <uses-permission Android:name="Android.permission.READ_CONTACTS" /> ou Android:permission="Android.permission.READ_CONTACTS" à <application> ou <activity>, mais les deux ne fonctionnaient pas.

Je suis à court d'options, est-ce que quelqu'un sait ce qui me manque ici?

16
Danielvd

le <uses-permission> devrait être contenu dans l'élément <manifest>. Voir Structure du fichier manifeste . Donc, essayer de le mettre dans <application> ou <activity> ne fonctionnera pas. Mouvement désespéré: essayez de déplacer <uses-sdk> avant <application>

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

De même, si vous pouvez tester sans les autres autorisations, supprimez-les.

EDIT: Pouvez-vous vérifier s'il s'agit de votre ligne TOP dans votre fichier manifeste: 

<?xml version="1.0" encoding="utf-8"?>
14
hovanessyan

J'étais totalement coincé là-dessus jusqu'à ce que je lise cet article sur la gestion des autorisations, à partir du SDK 23. Astuce:

Si le paramètre targetSdkVersion de l'application est défini sur une valeur inférieure à 23, il est supposé que l'application n'est pas encore testée avec le nouveau système d'autorisation et qu'elle adopte le même comportement. une fois installé!

J'ai ouvert mon fichier gradle.build et changé targetSdkVersion 23 en targetSdkVersion 22, et maintenant tout fonctionne très bien! Je finirai par trouver le temps d'intégrer le nouveau système d'autorisations et de revenir à targetSdkVersion 23, ce qui est probablement la réponse la plus correcte. Ceci est un raccourci temporaire.

9
blythe83

Aucune de ce qui précède n'a aidé. La solution est assez simple ... vous aurez besoin d'une demande d'autorisation d'exécution.

avec ou sans placer l'autorisation dans votre manifeste, vous devrez demander cette autorisation à l'utilisateur à la volée . if( getApplicationContext().checkSelfPermission( Manifest.permission.READ_CONTACTS ) != PackageManager.PERMISSION_GRANTED ) ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CONTACTS}, resultValue);

alors seulement après l'approbation, vous pourrez interroger le numéro de téléphone/nom du contact, etc.

4
Alon Kogan

Essayez ceci dans votre méthode de création

ActivityCompat.requestPermissions (this, nouveau String [] {Manifest.permission.READ_CONTACTS}, 1);

4
TheChosenOne

J'ai eu le même problème et aucune des solutions que j'ai lues n'a aidé à le résoudre avant d'ajouter la permission WRITE_EXTERNAL_STORAGE avec la permission READ_CONTACTS.

<uses-permission Android:name="Android.permission.READ_CONTACTS" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
3
user1091524

J'ai rencontré ce problème aujourd'hui et aucune des solutions ci-dessus n'a fonctionné pour moi.

Le problème a finalement été lié à mon Eclipse. Ce que j'avais écrit dans le manifest.xml et ce qui se trouvait dans l'onglet Permissions n'étaient pas les mêmes. J'avais l'autorisation READ_CONTACTS dans mon manifest.xml, mais READ_PROFILE était à sa place sous l'onglet autorisation.

Je sais que c'est un vieux fil, mais j'espère que si quelqu'un a le même problème que moi, il tombera par hasard dessus.

Merci!

0
Justin Kibler