Cómo obtener foto de contacto URI
Estoy trabajando con Android Contact ContentProvider. Tengo un número de teléfono y necesito obtener el URI de la foto del contacto asociado con este número de teléfono. ¿¿¿Cómo puedo hacerlo???
Sé que puedo obtener los datos sin procesar de la foto y construir un InputStream , pero no quiero el flujo de entrada, necesito el URI .
- Nombre en su lugar nombre de tono de llamada
- Ejemplos de proveedores de contenido que no utilizan SQLite
- Insertar una nueva foto de contacto para Android
- ¿Las llamadas a un Content Resolver deben realizarse en un Servicio (es decir, un hilo separado)?
- ContentProvider llamadas atómicas? Guardar en onPause, cargar en OnActivityCreated, datos antiguos
EDIT: Originalmente estoy usando código siguiente para buscar información de contacto
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNo)); Cursor cursor = context.getContentResolver().query(uri, details, null, null, null);
- Agregar eventos al calendario nativo no funciona
- ¿Debo usar un proveedor de contenido?
- Android: Observación de SMS para subprocesos eliminados
- Android "No se encontró proveedor de contenido ni se revocó el permiso" con android 4
- Devolver un InputStream mapeado en memoria de un proveedor de contenido?
- Cómo manejar llamadas REST, persistencia de datos, sincronización y observación de ContentProvider
- Obtener los detalles de la organización de contacto en android?
- ¿Cómo puedo llamar al método personalizado en ContentProvider a través de ContentResolver y acceder a Bundle después?
Para obtener el id conatct usando el número de teléfono utilice el código siguiente:
import android.provider.ContactsContract.PhoneLookup; public String fetchContactIdFromPhoneNumber(String phoneNumber) { Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); Cursor cursor = this.getContentResolver().query(uri, new String[] { PhoneLookup.DISPLAY_NAME, PhoneLookup._ID }, null, null, null); String contactId = ""; if (cursor.moveToFirst()) { do { contactId = cursor.getString(cursor .getColumnIndex(PhoneLookup._ID)); } while (cursor.moveToNext()); } return contactId; }
Y utilizar el identificador de contacto obtenido para obtener la contatc foto URI. Utilice el siguiente código para obtener URI de foto:
import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.Phone; public Uri getPhotoUri(long contactId) { ContentResolver contentResolver = getContentResolver(); try { Cursor cursor = contentResolver .query(ContactsContract.Data.CONTENT_URI, null, ContactsContract.Data.CONTACT_ID + "=" + contactId + " AND " + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'", null, null); if (cursor != null) { if (!cursor.moveToFirst()) { return null; // no photo } } else { return null; // error in cursor process } } catch (Exception e) { e.printStackTrace(); return null; } Uri person = ContentUris.withAppendedId( ContactsContract.Contacts.CONTENT_URI, contactId); return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); }
Espero que esto ayude.
Esta solución demuestra cómo obtener una imagen de un contacto de usuario y luego mostrarla en un ImageView
.
ImageView profile = (ImageView)findViewById(R.id.imageView1); Uri my_contact_Uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(Contact_Id)); InputStream photo_stream = ContactsContract.Contacts.openContactPhotoInputStream(getContentResolver(),my_contact_Uri); BufferedInputStream buf =new BufferedInputStream(photo_stream); Bitmap my_btmp = BitmapFactory.decodeStream(buf); profile.setImageBitmap(my_btmp);
Aquí está el código de la documentación de Android .
Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId); return Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
final boolean IS_HONEYCOMB = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; String phoneNumber = "+1 416 385 7805"; ContentResolver contentResolver = context.getContentResolver(); Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.LOOKUP_KEY, IS_HONEYCOMB ? ContactsContract.Contacts.PHOTO_THUMBNAIL_URI : ContactsContract.Contacts._ID, }; Cursor cursor = contentResolver.query( uri, projection, null, null, null); if (cursor != null && cursor.moveToNext()) { long contactId = cursor.getLong(0); String lookupKey = cursor.getString(1); String thumbnailUri = cursor.getString(2); cursor.close(); }
Así que ahora si sdk es nido de abeja u superior u tiene thumbnail uri del contacto. O usted puede construir un lookup uri como este:
Uri uri = ContactsContract.Contacts.getLookupUri(contactId, lookupKey);
PS Si ya conoce el ID de contacto y / o la clave de búsqueda , puede construir un Uri de cadena:
content://com.android.contacts/contacts/lookup/{lookup key}/{contact id}
: content://com.android.contacts/contacts/lookup/{lookup key}/{contact id}
thumbnail: content://com.android.contacts/contacts/{contact id}/photo
Por lo tanto, es mejor almacenar en caché estos valores.
- RecyclerView onClick notifyItemRemoved no desencadena onBindView
- Anulación de variables de Fragmento on onDestroy ()