Nesse artigo aprenderemos como ler os contatos do celular utilizando o Sistema Operacional Android.

Para poder ler os contatos precisamos de permissão do Sistema Operacional e para isso no arquivo AndroidManifest.xml devemos colocar a permissão android.permission.READ_CONTACTS, veja sua implementação completa abaixo.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="br.com.LerContatos" android:versionCode="1"
       android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".LerContatos"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.READ_CONTACTS">
</uses-permission>
</manifest>


Vamos começar criando duas entidades, contatos e telefones, conforme listagens abaixo.

Entidade Contato

package br.com.LerContatos;
import java.util.List;
public class EntidadeContatos {
      private String ID;
      private String Nome;
      private String Email;
      private List<EntidadeTelefone> Telefones;
      public String getID() {
            return ID;
      }
      public void setID(String string) {
            ID = string;
      }
      public String getNome() {
            return Nome;
      }
      public void setNome(String nome) {
            Nome = nome;
      }
      public List<EntidadeTelefone> getTelefones() {
            return Telefones;
      }
      public void setTelefones(List<EntidadeTelefone> telefones) {
            Telefones = telefones;
      }
      public String getEmail() {
            return Email;
      }
      public void setEmail(String email) {
            Email = email;
      }
      //Metodo sobreescrito para que não aparece o nome do componente
      //na listView
      @Override
      public String toString() {
            // TODO Auto-generated method stub
            return Nome + "-"  + Telefones.get(0);
      }
}


Entidade Telefone

package br.com.LerContatos;
public class EntidadeTelefone {
private String Telefone;
public String getTelefone() {
      return Telefone;

}

public void setTelefone(String telefone) {
      Telefone = telefone;
}
@Override
      public String toString() {
            // TODO Auto-generated method stub
      return "Telefone: " + Telefone;
      }
}


Em seguida criaremos a classe Contatos que fará o preenchimento das mesmas.

package br.com.LerContatos;
import android.content.Context;
import android.database.Cursor;
import android.provider.ContactsContract;
import java.util.ArrayList;
import java.util.List;
public class Contatos {
      private Context ctx;
      public Contatos(Context contexto)
      {
            this.ctx = contexto;
      }
      public List<EntidadeContatos> getContatos()
      {
        Cursor C_Contatos
=this.ctx.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, ContactsContract.Contacts.DISPLAY_NAME);
      //pega os index das colunnas
      int IndexID = C_Contatos.getColumnIndex(ContactsContract.Contacts._ID);
      int IndexTemTelefone =
C_Contatos.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);

      int IndexName =
C_Contatos.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);

      List<EntidadeContatos> Contatos = new ArrayList<EntidadeContatos>();
      EntidadeContatos Contato;
        while(C_Contatos.moveToNext())
        {
            Contato = new EntidadeContatos();
            Contato.setID(C_Contatos.getString(IndexID));            Contato.setNome(C_Contatos.getString(IndexName));
            //verifica se o contato tem telefone
            if(Integer.parseInt(C_Contatos.getString(IndexTemTelefone))>0)
            {
                Telefone _Telefone = new Telefone(Contato.getID(), this.ctx);
                 Contato.setTelefones(_Telefone.getTelefones());
            }
            Contatos.add(Contato);
        }
        C_Contatos.close();
        return Contatos;
      }
}


veja na próxima parte a continuação deste artigo onde vamos ver as outras classes a serem criadas.


http://www.nandosilva.com/
http://www.twitter.com/nandinhors