Técnico especialista en informática de empresa (CEU).
Ingeniero Técnico en Informática de Sistemas (UPM)
Creador de MobileTest, Haaala!, Girillo, toi18n.
Charla sobre desarrollo de aplicaciones en Android.
Fecha de publicación del tutorial: 2011-08-03
Android: Leer correos de Gmail
- Introducción
- Captura de pantalla de la aplicación a construir
- Código fuente del ejemplo
- Otros métodos y consideraciones
Introducción
Este tutorial os voy a proporcionar un ejemplo de como acceder a los correos electrónicos de Gmail desde vuestras aplicaciones Android sin tener que solicitar al usuario la contraseña de su cuenta de correo.
Para empezar te diré, que no necesita acceder a Internet, es decir, que los correos están ya descargados por el cliente de correo que tiene preinstalado Android y configurado.
Este tutorial surge como apoyo al lector después de realizar muchos esfuerzos e investigaciones para crear mi aplicación Haaala!
Captura de pantalla de la aplicación a construir
Es una aplicación sencilla (didáctica), un botón que al hacer clic en el se ejecuta una tarea que accede al correo electrónico y muestra el asunto de los correos recibidos en desde una determinada fecha.

Código fuente del ejemplo
Puedes descargarte el código fuente haciendo clic aquí
Manos a la obra..
Ventana principal de la aplicación:
Contrato de comunicación entre actividad y tarea en background (tampoco haría falta hacerlo así, hay otras muchas formas de comunicación..)
Tarea que accede a través de consultas a un Content Provider a los datos de Gmail:
Si quieres más información sobre posibles parámetros de todo, busca en Google información sobre Gmail.java ContentProvider
Objeto de negocio que nos construye la tarea desde el contenido de un correo electrónico
El archivo de configuración de la aplicación: AndroidManifest.xml
La ventana principal de la aplicación
Otros métodos y consideraciones:
Los usuarios son muy reticentes a proporcionar sus contraseñas de acceso a servicios tan importantes como Gmail, Facebook, etc... un método que cada vez está más extendido es el de usar el protocolo OAuth (o en caso de Google, además los protocolos propietarios: AuthSub y ClientLogin) para conceder a las aplicaciones determinados privilegios de acceso a los datos.
En el caso de Google, actualmente hay un rico API sobre muchos de sus Servicios (Google Maps, Latitude, Contacts, Picasa, etc.) los cuales encapsulan (wrapper) los datos que nos proporcionan las invocaciones a los servicios exportados en la nueva arquitectura que está migrando Google, de hecho existe un API en fase Beta.
El servicio de Gmail es un tanto especial, pues no hay un API del mismo tipo que para los otros servicios, pero si que hay distintas formas de acceso. He investigado bastante y conseguido acceso por todos los métodos y he visto en todas ellas las siguientes limitaciones:
- ¿A través de OAuth (v1 o v2)? » Sólo podremos acceder a un flujo de datos ATOM en donde podemos obtener el número de mensajes no leídos, los asuntos, un fragmento del cuerpo, la fecha y el emisor.
- API para acceder a IMAP y SMTP via Oauth, potente pero hay que hacer muchos pasos en donde se necesitan conocimientos técnicos, por lo que no lo veo viable para aplicaciones de uso general.
- ¿El AccountManager de Android? » El AccesToken sólo nos vale para conseguir el flujo ATOM.. es decir limitado para Gmail.
- ¿Pedirle los datos de acceso al usuario? Pues entonces sin problemas, tienes aceso por JavaMail a todo (envio, recepción, etc.), claro otra cosa es que el usuario quiera ponerla en la aplicación :-).
Bueno, espero que os sea de utilidad.
Un saludo. Carlos García
A continuación puedes evaluarlo:
Fecha publicación: 2012-11-25-18:32:10
Autor: takines
Fecha publicación: 2012-03-18-09:12:18
Autor: carlosgp
Permission Denial: opening provider com.google.android.gm.provider.MailProvider...
requires. com.google.android.gm.permission.READ_GMAIL or com.google.android.gm.permission.WRITE_GMAIL.
Está explicado en:
http://groups.google.com/a/googleproductforums.com/forum/#!category-topic/gmail/reading-and-receiving-messages/XD0C4sw9K7U











