Android obtendo a foto dos contatos a partir dos dado
Estou criando um campo de preenchimento automático que consulta contatos por Nome de exibição e E-mail. Quando alguém clicar no contato desejado após a filtragem desse contato ser adicionada a uma lista com seu email, exiba o nome e a imagem, se houve
Até agora, eu consegui fazer tudo, exceto para fazer a foto aparecer. Aqui está como eu executo a consulta para obter o email, o nome de exibição, o ID e o ID da fot
return mContent.query(Email.CONTENT_URI,
PROJECTION, filter, null, null);
nde a projeção é:
PROJECTION = new String[] {ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.PHOTO_ID,
Email.DATA
};
Este faz o que eu preciso e retorna todos os dados. Mas uma coisa que notei durante a depuração desse problema é que o ID do contato é diferente do que se você executasse a consulta no ContactsContract.Contacts.CONTENT_URI para um nome de exibição específico, por exempl
Por exemplo, os testes que eu executei onde obtive todos os contatos executando o Contacts.CONTENT_URI me deram um contato com uma imagem e um ID de 152. No entanto, a consulta no Email.CONTENT_URI me fornece um ID de 452 para o mesmo contato (Com o mesmo nome de exibição e endereço de e-mail). por isso, quando tento obter a foto para um uri de conteúdo contendo o ID 452, ele retorna que a foto não existe, mas se eu tentar obter a foto para 152, ela funciona perfeitament
O que está causando esse problema? como obtenho o ID do usuário correto? Existe alguma consulta relacional que eu possa executar para obter um ID de contato ou talvez uma maneira correta de obtê-lo com a ajuda dest
Obrigado
EDITA
Eu encontrei isso cavando em torno do código antigo. Pode ser útil para qualquer pessoa.
Então, a consulta completa:
String[] PROJECTION = new String[] { ContactsContract.RawContacts._ID,
ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.PHOTO_ID,
Email.DATA, ContactsContract.CommonDataKinds.Photo.CONTACT_ID };
String order = " CASE WHEN " + ContactsContract.Contacts.DISPLAY_NAME
+ " NOT LIKE '%@%' THEN 1" + " ELSE 2 END, "
+ ContactsContract.Contacts.DISPLAY_NAME + " COLLATE NOCASE";
String filter = Email.DATA + " NOT LIKE '' ) GROUP BY ( " + Email.DATA;
then its
getContentResolver().query( Email.CONTENT_URI, PROJECTION, filter, null, order);