Solicitar permiso de lectura de mi propio ContentProvider en otra aplicación
En una aplicación, tengo el siguiente proveedor de contenido declarado en mi AndroidManifest:
<provider android:name="bbct.android.common.BaseballCardProvider" android:label="@string/provider_name" android:authorities="bbct.android.baseballcard" android:readPermission="bbct.android.lite.permission.READ" />
Y otra aplicación solicita permiso para usarlo:
- Señal fatal 7 (SIGBUS) en 0x00000000 (código = 2)
- Inicie una nueva actividad fuera del contexto de la actividad.
- La llamada requiere permisos que pueden ser rechazados por el usuario.
- Android: variable tiene un valor incorrecto en while loop
- Android: runtime-error 'No se puede crear el directorio', en el uso de la clase DownloadManager, method setDestinationInExternalPublicDir
<uses-permission android:name="bbct.android.lite.permission.READ" />
Pero cuando se ejecuta este código:
ContentResolver resolver = this.context.getContentResolver(); Cursor results = resolver.query(BaseballCardContract.CONTENT_URI, BaseballCardContract.PROJECTION, null, null, null);
Consigo el mensaje de error siguiente:
E / DatabaseUtils (1009): java.lang.SecurityException: Permiso Negación: lectura bbct.android.common.BaseballCardProvider uri contenido: //bbct.android.baseballcard/baseball_cards de pid = 996, uid = 10046 requiere bbct.android.lite .permission.READ o grantUriPermission ()
Por lo que puedo decir, estoy solicitando el permiso requerido. ¿Que me estoy perdiendo aqui? ¿Qué más necesito mirar?
- Error de facturación en la aplicación de Android InvalidKeySpecException
- No se muestra nada después de abrir la aplicación
- Android IntentService Error de instancia
- Java.lang.RuntimeException: No se pudo abrir el par de canales de entrada
- No pudo acceder al gestor de paquetes. Se ejecuta el sistema mientras se instala la aplicación android
- Android - Crash al generar un número aleatorio
- Ksoap2 no puede serializar la excepción en Android 2.2 (utilizando objetos definidos por el usuario)
- No se puede crear el controlador dentro de hilo que no ha llamado Looper.prepare () dentro de AsyncTask para ProgressDialog
En la aplicación que define su ContentProvider, ¿también definió el permiso que está solicitando / solicitando (en su otra aplicación)? Al igual que (dentro de la etiqueta raíz <manifest/>
):
<permission android:name="bbct.android.lite.permission.READ" />
En general, es necesario:
- defina el permiso en uno de los archivos de manifiesto de sus aplicaciones
- solicite el permiso en cualquiera de los archivos de manifiesto de sus aplicaciones, para aplicaciones que deseen obtener el permiso
- requieren este permiso en cualquier componente que desee proteger con este permiso, como Actividades, Servicios o ContentProviders (leer, escribir, ambos, sub-URIs específicos, etc.)
Edit: tan sólo para ser 100% claro, no es suficiente para "implícitamente" definir un permiso, lo que requiere, por ejemplo, su ContentProvider. Tienes que definirlo explícitamente en el archivo de manifiesto de tu aplicación (dentro de la etiqueta <manifest/>
).