Android: content providers

Un proveedor de contenido es una capa de software que permite compartir datos almacenados en un respositorio común de datos con multiples aplicaciones. Este contenido puede estar almacenado fuera del dispositivo, en una base de datos del dispositivo o en un conjunto de ficheros del dispositivo, por ejemplo la galería de fotos de un móvil.

Para acceder a un proveedor de contenido debes utilizar un objeto ContentResolver con el contexto activo de tu app. ContentResolver se conecta con ContentProvider que realiza las operaciones CRUD de datos solicitadas y devuelve una respuesta.

Para acceder a ContentResolver desde el interfaz de usuario se suele utilizar un CursorLoader que realiza las operaciones desde un segundo plano.

Para poder realizar estas operaciones normalmente es necesario pedir permisos específicos. Si por ejemplo queremos acceder a la galería de fotos del dispositivo tendremos que declarar el permiso en el manifest de la app:

<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.com.vansuita.pickimage.provider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/picker_provider_paths" />
</provider>

En este ejemplo el elemento más importante es el tag authorities en el que determinamos el id de la app y de la librería que va a acceder al contenido.

Todo acceso a contenido se realiza vía URI, esta se define con el nombre de seguridad de la autoridad y una ruta de acceso. Os pongo un ejemplo de acceso a un diccionario:

content://user_dictionary/words

Puedes acceder al proveedor de tres maneras alternativas:

  • Acceso por lotes
  • Consultas asíncronas
  • Acceso a datos mediante Intents a la aplicación del proveedor
En fin, es un tema más sencillo de utilizar que de explicar, y más en Blogger. Espero que por lo menos os haya aclarado algo las cosas.

Comentarios