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