2011-11-12 21 views
14

Estoy trabajando en una aplicación simple que navega a través de los contactos del usuario. Por desgracia me siguen dando el siguiente error:permission.READ_CONTACTS no parece funcionar

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 

Mi archivo de manifiesto es así:

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

Estoy intentando mirar a mis contactos por:

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

tengo intentado agregar <uses-permission android:name="android.permission.READ_CONTACTS" /> o android:permission="android.permission.READ_CONTACTS" a <application> o <activity>, pero ambos no funcionaron.

Me estoy quedando sin opciones, ¿Alguien sabe lo que me falta aquí?

+1

verificación si usted permite que el permiso de la configuración del teléfono androide !! – Steve

Respuesta

12

el <uses-permission> debe estar en el elemento <manifest>. Ver Structure of the Manifest File. Intentando ponerlo en <application> o <activity>, no funcionará. La desesperación movimiento: tratar de mover <uses-sdk> antes <application>

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

también si se puede probar sin los otros permisos, eliminarlos.

EDIT: ¿Puede usted por favor, compruebe si este es su línea superior en el archivo de manifiesto:

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

gracias por su respuesta, primero moví '' todo el camino hacia arriba, eso no ayudó. A continuación, eliminé todos los permisos excepto READ_CONTACTS, desafortunadamente eso tampoco funcionó – Danielvd

+0

Hola, edité mi respuesta. No estoy seguro de si ha publicado todo su manifiesto, o solo parte. En cualquier caso, la declaración de permiso es correcta. ¿Puedes intentar ejecutar "validate" en tu manifiesto? – hovanessyan

+0

mi mal, intenté publicar mi manifiesto completo, aparentemente olvidé la primera línea. Edité mi pregunta y agregué la primera línea. – Danielvd

0

me encontré con este problema hoy y ninguna de las correcciones anteriores trabajó para mí.

Lo que terminó siendo el problema tenía que ver con mi Eclipse. Lo que había escrito en el manifest.xml y lo que estaba en la pestaña Permissions no era lo mismo. Tuve el permiso READ_CONTACTS en mi manifest.xml, pero READ_PROFILE estaba en su lugar bajo la pestaña de mi permiso.

Sé que este es un hilo viejo, pero espero que si alguien tiene el mismo problema que yo, se tropiecen con esto.

Gracias!

3

Tuve el mismo problema y ninguna de las soluciones que leí ayudó a resolverlo hasta que agregué el permiso WRITE_EXTERNAL_STORAGE junto con el permiso READ_CONTACTS.

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

¿Alguna idea de por qué necesitarías eso? – AdamMc331

6

estaba totalmente atascado en esto hasta que leí this article acerca de cómo se manejan los permisos empezando con el SDK 23. La sugerencia crítica:

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 !

abrí mi archivo gradle.build y cambió targetSdkVersion 23-targetSdkVersion 22, y ahora todo funciona genial! Eventualmente encontraré tiempo para construir en el nuevo sistema de permisos y volveré al targetSdkVersion 23, que probablemente sea la respuesta más correcta. Este es un atajo temporal.

+1

¡Esto fue todo para mí, gracias! (El mensaje de error en la excepción lanzada por Android no fue muy útil). Elegimos implementar correctamente los permisos de tiempo de ejecución solicitantes, y para eso los [documentos oficiales] (https://developer.android.com/training/permissions/requesting. html) fueron en última instancia el recurso más útil. – Jonik

3

probar este en su método de crear

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

1

Ninguno de los anteriores ayudó. La solución es bastante simple. necesitará una solicitud de permiso de tiempo de ejecución.

con o sin colocar el permiso en su manifiesto, deberá solicitar ese permiso al usuario sobre la marcha. if(getApplicationContext().checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CONTACTS}, resultValue);

sólo entonces después de la aprobación que se podrá consultar el número de contactos de teléfono/Nombre etc.

Cuestiones relacionadas