contacto[arroba]digitallearning.es

Contacts Provider: acceso al repositorio de datos de contacto

Post Series: Content Provider en Android

Siguiendo con nuestra primera serie de publicaciones sobre Content Provider, vamos a ver uno que proporciona Android, denominado Contacts Provider y que permite el acceso al repositorio central de datos de contactos de personas almacenadas en el dispositivo móvil.

El Contacts Provider almacena tres tipos de datos acerca de una persona, en el que cada uno de estos datos corresponde a una tabla proporcionada por el proveedor:

Estructura Contacts Provider

Se definen tres tablas, construidas a partir de las clases de contratos:

ContactsContract.Contacts

Proporciona una serie de constantes para la tabla de contactos, que define un registro por cada nuevo raw contact que representa a una misma persona.

Operaciones:

  • Insertar: No es posible insertar un nuevo contacto de manera explícita. Es necesario en primer lugar que el provider compruebe la existencia del contacto que represente a la persona (a través del campo contact_id del nuevo contacto), en caso de no existir, el provider insertará un nuevo contacto asignándole un _ID en la columna comentada anteriormente.
  • Actualizar: Cualquier modificación del contacto se hará efectiva en todos los raw contacts que constituya. No es posible la modificación de las siguientes columnas: TIMES_CONTACTED, LAST_TIME_CONTACTED, STARRED, CUSTOM_RINGTONE, SEND_TO_VOICEMAIL.
  • Eliminar: En caso de eliminar un contacto, los adaptadores de sincronización se encargarán de ejecutar la operación en todos los raw contacts donde esté definido.
  • Consultar:
    • Búsqueda de un contacto: CONTENT_LOOKUP_URI (URI)
    • Búsqueda de un contacto por número de teléfono: PhoneLookup.CONTENT_FILTER_URI (URI)
    • Búsqueda de un contacto por nombre aproximado: CONTENT_FILTER_URI (URI)
    • Búsqueda de un contacto por correo electrónico o sobrenombre: consulta sobre la tabla ContactsContract.Data

Documentación oficial Android ContactsContract.Contacts

ContactsContract.RawContacts

Define una serie de constantes de la tabla raw contacts, formada por una fila que contendrá información de un contacto por cada cuenta sincronizada.

Operaciones:

  • Insertar: Es posible insertar un contacto de manera incremental o por lotes.

Ejemplo incremental:

Ejemplo por lotes:

  • Actualizar: Es posible actualizar un contacto de manera incremental o por lotes. Es recomendable, siempre que sea posible, utilizar el modo por lotes.
  • Eliminar: Cuando se elimina un raw contact, todas las filas de datos serán también eliminadas. Cuando se eliminan todos los raw contacts de un Contacto, se eliminará toda la información almacenada de este Contacto.
  • Consultar: Para la realización de una consulta que devuelva todos los raw contacts de un contacto, será necesario insertar el siguiente código:

Documentación oficial Android ContactsContract.RawContacts

ContactsContract.Data

Implementa las constantes para la tabla Data. Cada fila de dicha tabla se utiliza para almacenar un sólo bloque de información de contacto, como por ejemplo el número de teléfono, además de sus metadatos asociados.

Operaciones:

  • Insertar: Para insertar una fila de datos individual, bastará con invocar al método insert(Uri, ContentValues). Para insertar múltiples filas, deberá realizarse mediante la inserción de un lote:

Ejemplo para insertar una fila individual de datos:

  • Actualizar: Es posible realizar operaciones de actualización tanto de forma incremental como por lotes. Se recomienda el uso de lotes:

Ejemplo de actualización por lotes:

  • Eliminar: Esta operación es posible, mediante la llamada al método delete(Uri, String, String[]), o usando un ContentProviderOperation:

Ejemplo uso de ContentProviderOperation:

  • Consultar: Bastará con la llamada al método query(Uri,projection,selection,selectionArgs,sortOrder):

Ejemplo que devuelve todos los datos de un determinado tipo, para un contacto dado:

Documentación oficial Android ContactsContract.Data

Ejemplo de relación entre las tres tablas principales

Relacion Tablas Contact Provider


Créditos: las imágenes de esta publicación provienen  de la documentación oficial Android sobre Contacts Provider publicada con licencia Creative Commons Attribution 2.5