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.
- Proveedor de contenido grant uri permission
- Cómo obtener la ruta del archivo de la imagen de URI en Android Lollipop?
- El atributo pathPrefix de Deeplink de Android se está omitiendo
- "La actividad exportada no requiere permiso" al intentar iniciar desde un URI
- ¿Por qué ImageView.setImageURI () funcionaría en Android 2.2 pero no en 2.1?
- Cómo obtener la ruta completa del archivo desde URI
- Descubriendo todo acerca de la clase Uri de Android: uso y propósito
- Abrir archivo html local con el navegador de Android
- Cambiar URI de MediaPlayer
- Puedo obtener el ancho de archivo de imagen y la altura de uri en android?
- Cuando toma la foto get - java.lang.Throwable: file: // Uri expuesto a través de ClipData.Item.getUri ()
- ContentObserver en el contenido: // sms / in 1.6+?
- CursorLoader, obtiene URI para la base de datos local
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 deshabilitar la aplicación nativa de Facebook para el inicio de sesión de usuario
- ¿Cómo puedo iniciar la actividad PRINCIPAL con la ayuda de <intento-filtro>?