Estoy tratando de leer el contenido de un cursor de este modo:Android denegación de permisos si otra aplicación en la que no instala por primera vez
cursor = context.getContentResolver().query(TASKS_URI, null, null, new String[]{"-1", "true"}, null);
Cuando el TASKS_URI es:
private final static Uri TASKS_URI = Uri.parse("content://org.dayup.gtask.data/tasks");
Así que todo lo que estoy tratando hacer es obtener un cursor de otra aplicación.
En mi manifest.xml defino mi permiso como:
<uses-permission android:name="org.dayup.gtask.permission.READ_TASKS"/>
El problema es que si mi aplicación se instaló antes que la otra aplicación (en este caso gtask) me sale el siguiente error:
05-08 15:26:45.380: ERROR/ActivityThread(18564): Failed to find provider info for org.dayup.gtask.key
05-08 15:26:45.390: ERROR/AndroidRuntime(18509): FATAL EXCEPTION: Thread-12
java.lang.SecurityException: Permission Denial: reading org.dayup.gtask.GoogleTaskProvider uri content://org.dayup.gtask.data/tasks from pid=18509, uid=10114 requires org.dayup.gtask.permission.READ_TASKS
at android.os.Parcel.readException(Parcel.java:1322)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:160)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)
at android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:372)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:408)
at android.content.ContentResolver.query(ContentResolver.java:264)
Si vuelvo a instalar mi aplicación o si mi aplicación se instaló después de las demás, todo funciona bien. ¿Alguna idea sobre cómo volver a adquirir estos permisos en tiempo de ejecución?
Se puede utilizar Android: required = "false" para los permisos o es que sólo presenta? –
No creo que puedas, el problema es que las otras aplicaciones (correctamente) comprueban si mi aplicación tiene permisos y luego niegan el permiso de mi aplicación, por lo que se requiere permiso. – PhilipK