Obtenga un URI para una foto de RawContact en Android

Sé que puedo obtener el URI de la foto de un contacto usando:

Uri person = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); Uri photoUri = Uri.withAppendedPath(person, Contacts.Photo.CONTENT_DIRECTORY); 

¿Hay una manera de hacer lo mismo para un RawContact?

He intentado:

 Uri person = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId); Uri photoUri = Uri.withAppendedPath(person, Contacts.Photo.CONTENT_DIRECTORY); 

Pero no funciona …

La razón por la que necesito un URI en lugar del blob real es porque el código está en un AppWidget y parece que hay un límite muy duro de un par de megs al pasar los datos de un widget al lanzador, así que necesito usar setImageViewUri y no SetImageViewBitmap.

Gracias.

    Aquí está la solución a su problema. Solución

    También tuve el mismo problema y después de excavar y leer el código fuente de Android, lo conseguí. Es probable que a finales de ahora (para usted), pero aquí es de todos modos.

     public InputStream getBitmapFromUri(String rawContactId) throws FileNotFoundException { final Uri photoUri = Uri.withAppendedPath( ContentUris.withAppendedId(RawContacts.CONTENT_URI, Long.valueOf(rawContactId)), RawContacts.DisplayPhoto.CONTENT_DIRECTORY); final InputStream imageStream = contentResolver.openInputStream(photoUri); return imageStream; } 

    Creo que necesitas acceder directamente a la tabla 'data' (ContactsContract.Data) para obtener la foto de los contactos sin procesar. La columna 'data15' debería almacenarla. Contacts.Photo.CONTENT_DIRECTORY es la ruta fotográfica principal del contacto, pero no se proporciona dicha ruta para los contactos sin formato en el valor predeterminado.

    Si está consultando RawContacts también puede agregar RawContacts.CONTACT_ID a la proyección, entonces puede construir el URI de la misma manera:

     long contactId = cursor.getLong(cursor.getColumnIndex(RawContacts.CONTACT_ID)); Uri person = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); Uri photoUri = Uri.withAppendedPath(person, Contacts.Photo.CONTENT_DIRECTORY); 

    Un año más tarde y ninguna respuesta real, supongo que no se puede hacer.

    Terminé usando setImageBitmap lugar de setImageUri , y usé un código de escala para el bitmap para reducir el consumo de memoria tanto como sea posible (un bucle que solicita tamaños más pequeños y más pequeños del mapa de bits hasta que el tamaño está bajo un límite const).

    Esto parecía funcionar bien para casi todos nuestros usuarios, algunos todavía se quejan de las fotos que faltan en el widget, pero yo diría que menos de 2-3% de nuestros usuarios que es un poco aceptable.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.