contacto[arroba]digitallearning.es
Logica Activities Content Provider

Proyecto Android con Content Providers (I)

Post Series: Content Provider en Android

Vamos a desarrollar un proyecto que nos sirva de ejemplo práctico para la utilización de Content Providers en una aplicación Android. Esta nos permitirá acceder a diferentes modelos de datos que proporciona Android, a través de varios Content Providers ya definidos, proporcionando acceso al registro de llamadas, a la agenda de contactos y a los mensajes de texto almacenados en el dispositivo móvil.

Enumeramos en primer lugar los elementos necesarios para el desarrollo del proyecto, así como la lógica de acceso de las Activities, y continuaremos presentando la estructura del proyecto y su código fuente detallado.

Este proyecto, que denominaremos “ProviderAndroid“, lo publicaremos en dos entregas debido a su extensión. Podrás descargar el código completo en la segunda parte.

Elementos Proyecto ProviderAndroid

  • Una clase MainActivity, que herede de la clase base Activity, que construye la lógica de navegación entre las diferentes Activities definidas.
  • Tres Activities, que hereden de la clase base ListActivity, encargadas de mostrar los diferentes modelos de datos que proporciona Android para el acceso al registro de llamadas, la agenda de contactos y los mensajes SMS almacenados.
  • Tres clases adaptadores, que hereden de la clase base BaseAdapter, para la construcción de las vistas de cada uno de los ítems, que formarán los diferentes componentes de tipo selección ListView.
  • Tres clases (Contactos, Llamadas y Mensajes) que permitan crear nuevos objetos, con los datos de cada registro del Content Provider proporcionado por Android, asociado a los diferentes modelos de datos (métodos getters y setters).
  • Un layout principal, formado por tres componentes de tipo Button para navegar entre las diferentes pantallas de la aplicación, y tres layout que construirán las diferentes listas asociadas al registro de llamadas, la agenda de contactos y los mensajes de texto almacenados. Además en cada uno de estos tres layout se implementan dos componentes de tipo Button para actualizar y eliminar registros.
  • Se crean tres layout personalizados que construirán los ítems de cada ListView definido. Estarán formados por tres componentes de tipo TextView cada uno.

Lógica de acceso

Mostramos en el siguiente diagrama, la lógica de acceso a las diferentes Activities que muestran información de los Contents Providers definidos en Android (pincha en la imagen para ampliarla):
Logica Activities Content Provider

Estructura del proyecto

Aquí presentamos la estructura del proyecto ProviderAndroid, con todas las clases y layouts que implementaremos y que detallaremos en el siguiente apartado:

Estructura del Proyecto

Documentación código fuente

A continuación presentaremos todo el código del proyecto. Como hemos indicado al principio, este proyecto lo publicamos en dos entregas. En esta primera publicación veremos todas las clases que utilizaremos en el proyecto y en la segunda parte, presentaremos todos los layouts, con las vistas y elementos visuales de la aplicación. También en esa 2ª parte, podrás descargar el código completo del proyecto.

Comenzamos pues a describir cada una de las clases del proyecto, mostrando la pantalla de la activity correspondiente:

ProviderAndroid\src\com\academiaandroid\providerandroid\MainActivity.java

Main Activity

  1. Se define una clase llamada MainActivity, que hereda de la clase base Activity, encargada de construir la lógica de navegación entre Activities:
  2. Se implementan tres eventos onClick(), responsables de lanzar las diferentes Activities que mostrarán el registro de llamadas, la agenda de contactos y los sms almacenados:

 

ProviderAndroid\src\com\academiaandroid\providerandroid\RegistroLlamadas.java

Pantalla Registro Llamadas

  1. Se implementa una nueva clase llamada RegistroLlamadas, que hereda de la clase base ListActivity, encargada de mostrar el registro de llamadas (salientes, entrantes y perdidas) en un componente de tipo ListView:
  2. Se declaran tanto un componente de tipo ListView, como dos componentes de tipo TextView para mostrar información relativa al registro de llamadas. Además se construye un Array de Strings, para acceder a las columnas con el tipo de llamada, número de teléfono y fecha de la llamada:
  3. Se enlazan los componentes con sus recursos a nivel de layout:
  4. Se invoca al método setAdapter(), recibiendo como argumento la instancia de la clase AdaptadorLlamadas(), cuyo constructor está compuesto por el contexto y un ArrayList de objetos Llamadas, que devuelve el método registroLlamadas():
  5. Se implementa un método llamado registroLlamadas(), que devolverá un ArrayList de objetos Llamadas, encargado de mostrar las llamadas almacenadas en un Content Provider proporcionado por Android. Se utiliza la clase ContentResolver para acceder al modelo de datos:
  6. Se define un evento onClick() llamado borrarLlamada(View view), que permite borrar una llamada seleccionada por el usuario, a partir del número de teléfono:
  7. Se construye un método llamado convertirFecha(long date), que recibe como parámetros de entrada un dato de tipo long, que proporciona la lógica para el formateo de la fecha y hora de cada llamada. Este método será invocado desde diferentes Activities para formatear las diferentes fechas mostradas:

ProviderAndroid\src\com\academiaandroid\providerandroid\MensajesTexto.java

Pantalla que muestra los mensajes

  1. Se implementa una clase llamada MensajesTexto, que hereda de la clase base ListActivity, encargada de mostrar los mensajes SMS almacenados (salientes y entrantes) en un componente de tipo ListView:
  2. Se declaran los componentes visuales de la interfaz de usuario, formados por un componente ListView, que mostrará la lista de SMS almacenados, un componente de tipo TextView, encargado de controlar el número de mensajes almacenados, y un componente de tipo EditText (no editable), donde se visualizará el contenido del mensaje que seleccione el usuario. Además se construye un array de Strings, con las columnas de tipo, número, fecha y contenido de la tabla Sms de cada mensaje:
  3. Se enlazan los componentes con sus recursos a nivel de layout:
  4. Se invoca al método setAdapter(), recibiendo como argumento la instancia de la clase
    AdaptadorSMS(), cuyo constructor está compuesto por el contexto y un ArrayList de objetos Mensajes,que devuelve el método mostrarListaSMS():
  5. Se construye el método mostrarListaSMS(), que devolverá un ArrayList de objetos Mensajes, encargado de mostrar los SMS almacenados en un Content Provider proporcionado por Android. Se utiliza la clase ContentResolver para acceder al modelo de datos:
  6. Evento onClick() borrarSMS(View view), que permite borrar una SMS seleccionado por el usuario, a partir del contenido mostrado:

ProviderAndroid\src\com\academiaandroid\providerandroid\ContactosAgenda.java

Pantalla que muestra Agenda Contactos

  1. Se implementa una nueva clase llamada ContactosAgenda, que hereda de la clase base ListActivity, encargada de mostrar los contactos almacenados en un componente de tipo ListView:
  2. Se declaran tanto un componente de tipo ListView, como dos componentes de tipo TextView para mostrar información relativa a los datos de cada contacto almacenado. Además se construye un Array de Strings, para acceder a las columnas con el tipo, datos y número de teléfono del contacto:
  3. Se enlazan los componentes con sus recursos a nivel de layout:
  4. Se invoca al método setAdapter(), recibiendo como argumento la instancia de la clase new AdaptadorContactos(), cuyo constructor está compuesto por el contexto y un ArrayList de objetos Contactos, que devuelve el método registroContactos():
  5. Se implementa un método llamado registroContactos(), que devolverá un ArrayList de objetos Contactos, encargado de mostrar los contactos almacenados en un Content Provider proporcionado por Android. Se utiliza la clase ContentResolver para acceder al modelo de datos:
  6. Se define un evento onClick() llamado borrarContacto(View view), que permite borrar un contacto seleccionado por el usuario, a partir de los datos del mismo:

ProviderAndroid\src\com\academiaandroid\providerandroid\Llamadas.java

1.Se define una clase Llamadas, que permitirá crear nuevos objetos, con los datos de cada registro del Content Provider proporcionado por Android, asociado a las llamadas registradas (métodos getters y setters):

ProviderAndroid\src\com\academiaandroid\providerandroid\Mensajes.java

1.Se define una clase Mensajes, que permitirá crear nuevos objetos, con los datos de cada registro del Content Provider proporcionado por Android, asociado a los mensajes de texto almacenados en el dispositivo (métodos getters y setters):

ProviderAndroid\src\com\academiaandroid\providerandroid\Contactos.java

1.Se define una clase Contactos, que permitirá crear nuevos objetos, con los datos de cada registro del Content Provider proporcionado por Android, asociado a la agenda de contactos almacenados en el dispositivo (métodos getters y setters):

ProviderAndroid\src\com\academiaandroid\providerandroid\AdaptadorLlamadas.java

  1. Se añade una clase llamada AdaptadorLlamadas, que hereda de la clase base BaseAdapter, encargada de construir la vista de cada uno de los ítems que se mostrarán en el componente ListView, con el registro de llamadas:
  2. Por último se construye la vista por cada ítem, sobrescribiendo el método getView() (devuelve un objeto de tipo View), a partir del ArrayList recibido y la posición que ocupa:

ProviderAndroid\src\com\academiaandroid\providerandroid\AdaptadorSMS.java

  1. Se añade una clase llamada AdaptadorSMS, que hereda de la clase base BaseAdapter, encargada de construir la vista de cada uno de los ítems que se mostrarán en el componente ListView, con los mensajes de texto almacenados en el dispositivo:
  2. A través del método getView(int position, View convertView, ViewGroup parent), se construye la vista por cada ítem, y se sobrescribe dicho método (devuelve un objeto de tipo View), a partir del ArrayList recibido y la posición que ocupa:

ProviderAndroid\src\com\academiaandroid\providerandroid\AdaptadorContactos.java

  1. Se añade una clase llamada AdaptadorContactos, que hereda de la clase base BaseAdapter, encargada de construir la vista de cada uno de los ítems que se mostrarán en el componente ListView, con la agenda de contactos del dispositivo:
  2. Por último se construye la vista por cada ítem, sobrescribiendo el método getView() (devuelve un objeto de tipo View), a partir del ArrayList recibido y la posición que ocupa:

En la próxima publicación completaremos el código de este proyecto, con todos los layouts de la aplicación.

 

This Post Has 2 Comments

Comments are closed.