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);

questionAnswers(4)

yourAnswerToTheQuestion