Obtener el perfil de usuario / propietario de contacto URI y la imagen de usuario con API 8 en adelante

Desde API 14 (Android 4.0 en adelante) en adelante puedo usar ContactsContract.Profile.CONTENT_URI para obtener el perfil de contacto del propietario del teléfono Uri, ya través de ese obtener su avatar / foto de contacto.

Quiero saber cómo hacer esto desde API 8 (Android 2.2) a través de API 13. Sólo necesito la foto (por lo que está bien si no hay concepto de un contacto de perfil de usuario antes de API 14), aunque estoy por no hay certeza de que sea realmente posible.

Pre API 14, no hay concepto del perfil de usuario antes de la API 14.

Esto significa que no es simplemente un caso de encontrar una alternativa para reemplazar ContactsContract.Profile.CONTENT_URI con cuando se ejecuta en dispositivos pre 4.0. Realmente tienes que implementar una solución.

Solución pobre (A): Utilice el número de teléfono SIM

Si el usuario se ha agregado como un contacto, esa información de contacto (incluyendo su foto / avatar) se puede buscar por número, al igual que cualquier otro contacto puede ser. El número de teléfono del usuario se puede recuperar desde el

 ((TelephonyManager)getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE)).getLine1Number(); 

Una vez que tenga el número, puede buscarlo usando una consulta, por ejemplo

 // Use PhoneLookup.PHOTO_URI from API 11 onwards for more direct lookup final String[] proj = { PhoneLookup.DISPLAY_NAME, PhoneLookup._ID, PhoneLookup.PHOTO_ID }; Cursor c = cr.query(Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)), proj, null, null, PhoneLookup.DISPLAY_NAME); 

Después de recorrer el cursor y recuperar el PHOTO_ID o PHOTO_URI , siempre que exista, puede obtener la construcción del URI adecuado de la siguiente manera:

 // I assume local variables long photoId or String photoUriString Uri photoUri = ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, photoId); // Just use Uri.parse(photoUriString); from API 11 onwards 

Sin embargo , hay algunos problemas con este método:

  • No todos los operadores almacenan el número de teléfono en sus SIMs.
  • No todos los teléfonos pueden escribir en esa sección de la tarjeta SIM.
  • No todos los teléfonos que escriben en esa sección lo harán en un formato utilizable por Android.

Solución ligeramente mejor (B): Añade una opción de avatar de usuario a tu aplicación

Implemente una forma para que un usuario seleccione una imagen como su foto / avatar de perfil como opción o configuración en su aplicación. Esto es razonable para implementarlo, pero obliga al usuario a agregar manualmente un avatar si lo desea en su aplicación.

No quiero reinventar la rueda, así que aquí hay un buen punto de partida para seleccionar una imagen . Debe guardar una versión de tamaño adecuado de la imagen en lugar de sólo el URI devuelto por la selección de usuario en caso de que la imagen de origen se cambia, se mueve o se elimina.

Es posible que desee permitir esta funcionalidad en la API 14 y en adelante dispositivos, así, ya que permite al usuario tener un avatar diferente a su aplicación.

Solución alternativa (C): A y B

¿Por qué molestarse? ¿Por qué no sólo B?

Considere la posibilidad de hacer ambas porque algunos usuarios cuyas tarjetas SIM contienen su número de teléfono pueden haber agregado a sí mismos como un contacto (creo que la aplicación de 2.3 SMS intenta la búsqueda de número SIM), y estoy seguro de que apreciarán mucho no tener que configurar manualmente un avatar . Hacer que los usuarios hagan un trabajo extra cuando podría hacerse automáticamente no es algo bueno.


Añadí A inicialmente sólo para obtener alguna funcionalidad para los dispositivos más antiguos que estábamos probando, luego añadió B, así un poco más tarde.

  • Cómo convertir un archivo: // uri en contenido: // uri?
  • Obtener el camino real para Uri Android
  • Visualización de imágenes de una carpeta específica de la tarjeta SD mediante una vista de cuadrícula
  • Android onNewIntent Uri es siempre nulo
  • Utilizar el constructor URI en Android o crear URL con variables
  • Android: ¿es posible adjuntar un archivo al correo electrónico sin escribir en SD?
  • Resolver el URI de diferentes fuentes en Android mientras se abre una imagen
  • Android - Consultando el ContentProvider de SMS?
  • Uso de una URL web para SUGGEST_COLUMN_ICON_1 para sugerencias de búsqueda
  • Convertir una ruta de acceso de archivo a Uri en Android
  • ¿Cómo obtener acceso a todas las tarjetas SD, utilizando la nueva Lollipop API?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.