Android obteniendo fotos de contactos de datos. Consulta por correo electrónico

Estoy haciendo un campo de autocompletar que consulta los contactos por nombre para mostrar y correo electrónico. Cuando alguien hace clic en el contacto deseado después de filtrar ese contacto se agrega a una lista con su correo electrónico, mostrar nombre e Imagen si tiene alguno.

Hasta ahora, he logrado hacer todo, excepto hacer que aparezca la foto. Así es como ejecuto la consulta para obtener el correo electrónico, el nombre para mostrar, la identificación y la identificación con foto.

    return mContent.query(Email.CONTENT_URI,
              PROJECTION, filter, null, null);

a proyección de @where es:

 PROJECTION = new String[] {ContactsContract.Contacts._ID,
              ContactsContract.Contacts.DISPLAY_NAME,
              ContactsContract.Contacts.PHOTO_ID,
                Email.DATA
            };

Este hace lo que necesito y devuelve todos los datos. Pero una cosa que noté durante la depuración de este problema es que la identificación del contacto es diferente que si ejecuta la consulta en ContactsContract.Contacts.CONTENT_URI para un nombre para mostrar específico, por ejemplo.

Por ejemplo, las pruebas que he realizado donde obtengo todos los contactos ejecutando los Contactos.CONTENT_URI me dio un contacto con una imagen y un ID de 152. Sin embargo, la consulta contra el Correo electrónico.CONTENT_URI me da una identificación de 452 para el mismo contacto (Con el mismo nombre para mostrar y dirección de correo electrónico). así que cuando trato de obtener la foto para una uri de contenido que contiene el Id 452, devuelve que la foto no existe, pero si trato de obtener la foto para 152, funciona perfectamente.

¿Qué está causando este problema? ¿Cómo obtengo la identificación de usuario correcta? ¿Hay alguna consulta relacional que tal vez pueda ejecutar para obtener una identificación de contacto, o tal vez una forma correcta de obtenerla con la ayuda de esta?

Gracias

EDITA

Encontré esto cavando alrededor del código antiguo. Puede ser útil para cualquiera.

Así que la 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;

Entonces e

getContentResolver().query( Email.CONTENT_URI, PROJECTION, filter, null, order);

Respuestas a la pregunta(4)

Su respuesta a la pregunta