2011-11-12 6 views
14

Sto lavorando su una semplice app che sfoglia i contatti dell'utente. Purtroppo continuo a ricevere il seguente errore:permesso.READ_CONTACTS non sembra funzionare

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 

mio file manifesto si presenta così:

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

Sto cercando di guardare i miei contatti da:

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

ho ha provato ad aggiungere <uses-permission android:name="android.permission.READ_CONTACTS" /> o android:permission="android.permission.READ_CONTACTS" a <application> o <activity>, ma entrambi non hanno funzionato.

Sono a corto di opzioni, qualcuno sa cosa mi manca qui?

+1

di controllo se si consente l'autorizzazione per l'impostazione del telefono Android !! – Steve

risposta

12

l'elemento <uses-permission> deve essere contenuto nell'elemento <manifest>. Vedi Structure of the Manifest File. Quindi, provare a inserirlo in <application> o <activity>, non funzionerà. Disperazione mossa: cercare di spostare <uses-sdk> prima <application>

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

Anche se è possibile verificare senza le altre autorizzazioni, rimuoverli.

EDIT: Potete per favore controllare se questa è la tua prima riga nel file manifest:

<?xml version="1.0" encoding="utf-8"?> 
+0

grazie per la tua risposta, ho spostato dapprima '' fino in fondo, che non ha aiutato. Successivamente ho rimosso tutte le autorizzazioni tranne il READ_CONTACTS, sfortunatamente non ha funzionato né – Danielvd

+0

Ciao, ho modificato la mia risposta. Non sono sicuro di aver pubblicato tutto il tuo manifest o solo una parte. In ogni caso, la dichiarazione di autorizzazione è corretta. Puoi provare a eseguire "validate" sul tuo manifest? – hovanessyan

+0

il mio male, ho intenzione di pubblicare il mio intero manifest, apparentemente ho dimenticato la prima riga. Ho modificato la mia domanda e aggiunto la prima riga. – Danielvd

0

mi sono imbattuto in questo problema oggi e nessuna delle correzioni di cui sopra ha lavorato per me.

Che problema si è avuto a che fare con Eclipse. Quello che avevo scritto nel manifest.xml e quello che c'era nella scheda Permissions non erano gli stessi. Ho avuto l'autorizzazione READ_CONTACTS nel mio manifest.xml, ma READ_PROFILE era nella sua posizione sotto la mia scheda di autorizzazione.

So che questo è un thread precedente, ma speriamo che se qualcuno abbia lo stesso problema che ho fatto, si imbatteranno in questo.

Grazie!

3

Ho avuto lo stesso problema e nessuna delle soluzioni che ho letto ha aiutato a risolverlo finché non ho aggiunto l'autorizzazione WRITE_EXTERNAL_STORAGE insieme all'autorizzazione READ_CONTACTS.

<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

Qualche idea del perché ne avresti bisogno? – AdamMc331

6

ero totalmente bloccato su questo fino a quando ho letto this article su come vengono gestiti i permessi iniziando con SDK 23. Il suggerimento critico:

If the application's targetSdkVersion is set to less than 23. It will be assumed that application is not tested with new permission system yet and will switch to the same old behavior: user has to accept every single permission at install time and they will be all granted once installed !

ho aperto il mio file gradle.build e cambiato targetSdkVersion 23-targetSdkVersion 22, e ora tutto funziona alla grande! Alla fine troverò il tempo per costruire il nuovo sistema di autorizzazioni e tornare a targetSdkVersion 23, che è probabilmente la risposta più corretta. Questa è una scorciatoia temporanea.

+1

Questo è stato per me, grazie! (Il messaggio di errore nell'eccezione generata da Android non era molto utile.) Abbiamo scelto di implementare correttamente le autorizzazioni di runtime richieste e, per questo, i [documenti ufficiali] (https://developer.android.com/training/permissions/requesting. html) erano in definitiva la risorsa più utile. – Jonik

3

Prova questo nella vostra sul metodo di creare

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

1

Nessuno dei precedenti ha aiutato. La soluzione è abbastanza semplice. hai bisogno di una richiesta di autorizzazione runtime.

con o senza immissione dell'autorizzazione nel manifest, è necessario richiedere tale autorizzazione all'utente al volo. if(getApplicationContext().checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CONTACTS}, resultValue);

solo allora dopo l'approvazione si sarà in grado di interrogare i contatti il ​​numero di telefono/nome ecc