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