Mostrando postagens com marcador ContactsContract. Mostrar todas as postagens
Mostrando postagens com marcador ContactsContract. Mostrar todas as postagens

sexta-feira, 30 de abril de 2010

Inserindo Contatos no Android

Olá povo,

Segue abaixo um exemplo de como adicionar um registro na agenda de contatos no Android. A partir da versão 2.0 do Android, a agenda armazena as informações em formato mestre/detalhe. Onde o registro mestre contém o id interno do contato, seu nome e sobrenome. Já os detalhes podem ser: endereço, e-mails, telefones, etc. Os telefones por sua vez, podem ser: Mobile, Mobile Work, Home, Work, Fax, etc.

Dessa forma, a inclusão terá que ser feita em uma transação só, ou seja, em batch.


// Lista de operações que serão realizadas em batch
ArrayList<ContentProviderOperation> operation =
new ArrayList<ContentProviderOperation>();

// Armazerá o id interno do contato
// e servirá para inserir os detalhes
int backRefIndex = 0;

// Associa o contato à conta padrão do telefone
operation.add(
ContentProviderOperation.newInsert(
RawContacts.CONTENT_URI).
withValue(RawContacts.ACCOUNT_TYPE, null).
withValue(RawContacts.ACCOUNT_NAME, null).build()
);

// Adiciona o nome do contato e alimenta id
operation.add(
ContentProviderOperation.newInsert(
Data.CONTENT_URI).
withValueBackReference(Data.RAW_CONTACT_ID,
backRefIndex).
withValue(Data.MIMETYPE,
StructuredName.CONTENT_ITEM_TYPE).
withValue(StructuredName.DISPLAY_NAME, "Fulano").
build()
);

// Adiciona um endereço ao contato a partir do id
operation.add(
ContentProviderOperation.newInsert(
Data.CONTENT_URI).
withValueBackReference(Data.RAW_CONTACT_ID,
backRefIndex).
withValue(Data.MIMETYPE,
StructuredPostal.CONTENT_ITEM_TYPE).
withValue(StructuredPostal.FORMATTED_ADDRESS,
"Rua do bolo").
build()
);

// Associa um telefone ao contato do tipo "Home"
operation.add(
ContentProviderOperation.newInsert(
Data.CONTENT_URI).
withValueBackReference(Data.RAW_CONTACT_ID,
backRefIndex).
withValue(Data.MIMETYPE,
Phone.CONTENT_ITEM_TYPE).
withValue(Phone.NUMBER, telefone).
withValue(Phone.TYPE, Phone.TYPE_HOME).
withValue(Phone.LABEL, "88999988").build());

// Aplica o batch de inclusão
getContentResolver().applyBatch(
ContactsContract.AUTHORITY, operation);


Pronto! Abaixo podemos ver o resultado na aplicação de contatos:



4br4ç05,
nglauber

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