domingo, 8 de novembro de 2009

Android 2.0 - Lista de Contatos

Olá povo,

Como nós estamos acompanhando, as versões do Android estão saindo com uma velocidade enorme. Mal eu tinha instalado a versão 1.6 e a versão 2.0 tinha saido do forno. Como já tem se tornado comum também, novidades legais têm sido apresentadas. Uma mudança muito forte feita nessa versão foi na parte de contatos, que permite que você adicione várias informações sobre seu contato como e-mail, IM, empresa, notas, etc. No entanto, essas novidades trazem modificações na API. Sendo assim, segue abaixo um código que lista os contatos cadastrados e seus respectivos IDs, e ao clicarmos em um contato da lista, são exibidos os telefones associados.


public class ExemploListaContatos extends ListActivity {

private ListAdapter adaptador;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// Obtém os contatos cadastrados utilizando
// a nova classe ContactsContract
Cursor c = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
startManagingCursor(c);

String[] colunas = {
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts._ID};

int[] campos = {
android.R.id.text1,
android.R.id.text2};

adaptador = new SimpleCursorAdapter(
this, android.R.layout.two_line_list_item,
c, colunas, campos);
setListAdapter(adaptador);
}

protected void onListItemClick(ListView l,
View v, int position, long id) {

super.onListItemClick(l, v, position, id);

// Obtém os campos da linha do contato
Cursor c = (Cursor)adaptador.getItem(position);

int contactId = c.getInt(
c.getColumnIndex(ContactsContract.Contacts._ID));

// Obtém os telefones do contato
Cursor phones = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,
null, null);

StringBuffer sb = new StringBuffer();
int tipo, resTipo;
String numero;

if (phones.getCount() > 0){
phones.moveToFirst();

// Percorre o cursor para obter
// Os telefones e o tipo
while (!phones.isAfterLast()){

tipo = phones.getInt(
phones.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.TYPE));

numero = phones.getString(
phones.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER));

resTipo = ContactsContract.CommonDataKinds.Phone.getTypeLabelResource(tipo);
sb.append(getString(resTipo) +": "+ numero +"\n");
phones.moveToNext();
}

} else {
sb.append("Nenhum número cadastrado.");
}
Toast.makeText(this, sb.toString(), Toast.LENGTH_SHORT).show();
}
}


Agora é só adicionar a permissão de leitura dos contatos ao AndroidManifest.xml.


<uses-permission
android:name="android.permission.READ_CONTACTS"/>


4br4ç05,
nglauber

Um comentário:

ksx disse...

Excelente Glauber!!! Já em 2009 você mostrou a utilização do ContactsContract, coisa que o livro da Novatec e o Professional Android 2 utilizam ainda a depreciada Contacts.People.