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:

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

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:

  1. defina el permiso en uno de los archivos de manifiesto de sus aplicaciones
  2. solicite el permiso en cualquiera de los archivos de manifiesto de sus aplicaciones, para aplicaciones que deseen obtener el permiso
  3. 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/> ).

  • W / CameraBase: Se ha producido un error al conectar la cámara: 0
  • Android Keystore Error "no pudo generar clave en keystore"
  • Se produjo un error después de actualizar la herramienta Android SDK REV 22 "No se pudo resolver la superclase de L"
  • Android - No se pudo encontrar google-play-services_lib.apk! error
  • Java.lang.IllegalAccessError ref de clase en la clase preverified resuelto a la implementación inesperada
  • La actividad no llamó a terminar? (API 23)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.