15 de junio de 2010

Listando contactos en Android con "Android.Contact"

Como prometí en el primer post sobre Android hoy voy a esplicar un poco de código de Android.

En este ejemplo podremos ver como se obtiene datos de contactos con una API menor de 5, es decir para los moviles con Android 1.x y actualmente se encuentra deprecated (obsoleta), en general esto quere decir que en un futuro será eliminada. Pero no obtante este no es el caso, ya que esta API continuará activa, pero sólo devolverá datos de la primera cuenta de Google creada.

Para el API 5 se creó la clase "ContactsContract", más reciente, que permite acceder a múltiples cuentas y agregar contactos que tengan un apoyo similar.

Para este ejemplo vamos a usar un "Cursor" para acceder a los datos, la clase "Contacts.Phones" para obtener las constantes para acceder a los datos de la agenda. Por supuesto, para poder leer esto es necesario tener permiso para leer la agenda. (Puedes descargar el codigo desde http://pastebin.com/AMGkjhzz)
@SuppressWarnings("finally")
public static boolean isContact(String num, ContentResolver contentResolver) {
 /**
  * Dado un numero de telefono num, retorna si está o no en la agenda
  * Para poder acceder a estos datos es necesario tener permiso de leectura de contactos.
  * ("android.permission.READ_CONTACTS" en AndroidManifest.xml)
  * @param num Numero de telefono
  * @param context Contexto con permisos de leectura de Contactos
  */
 boolean ret = false;
 try{
  Cursor cur = contentResolver.query(Contacts.Phones.CONTENT_URI, null, null, null, null);
  int index = cur.getColumnIndex(Contacts.Phones.NUMBER);
  while (!ret && cur.moveToNext())
   if (num.equals(cur.getString(index)))
    ret = true;
  cur.close();
 } catch (Exception e) {
  e.printStackTrace();
 } finally {
  return ret;
 }
}

Más Información:
http://developer.android.com/guide/appendix/api-levels.html

ContentResolver

2 comentarios:

  1. Hola, estoy haciendo un ejercicio para clase que necesito obtener la direccion del contacto que tengo en la agenda del tlf, a que clase debo de acceder para obtener dicho dato del contacto. Gracias de antemano.

    ResponderEliminar
  2. No existe una clase como tal para acceder a la agenda. Android provee un sistema de comunicación entre aplicaciones que permite que una aplicación conecte con otra a través de un cursor.

    Tienes ejemplos de como acceder a esa información en varios post en el foro StackOverflow.

    http://stackoverflow.com/questions/3609700/get-postal-address-from-a-contact-using-contactscontract-api-on-android

    http://stackoverflow.com/questions/5848573/get-all-contacts-and-their-details-e-g-postal-address-in-one-outer-join-query

    http://stackoverflow.com/questions/1856270/get-address-in-contacts-using-android-sdk

    ResponderEliminar