如何获取联系人的照片URI
如何获取联系人的照片URI
我正在使用Android Contact ContentProvider。我有一个电话号码,需要获取与该电话号码相关联的联系人照片的URI。我应该如何做到这一点?我知道可以获取照片的原始数据并构建一个InputStream,但我不需要InputStream,我需要URI。
编辑:最初我使用以下代码获取联系人信息
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNo)); Cursor cursor = context.getContentResolver().query(uri, details, null, null, null);
如何获取联系人照片URI
在以下代码中使用手机号码获取联系人ID:
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; }
然后使用获取到的联系人ID来获取联系人照片URI。使用以下代码获取照片URI:
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); }
请确保在Manifest文件中包含READ_CONTACTS权限,并在完成后关闭游标以避免内存泄漏。
获取照片URI的方法是完全错误的,请不要使用它。您还需要检查URI的存在性。应该删除答案。如果您需要URI,请从内容提供程序中读取PHOTO_URI或PHOTO_THUMBNAIL_URI以获得有效的URI!
很容易在没有任何示例的情况下告诉不应该做什么以及应该做什么。请提供您的解决方案。
如何获取联系人照片的URI
问题出现的原因:
在Android开发中,有时候我们需要获取联系人的照片URI。然而,直接使用ContactsContract.Contacts.Photo.CONTENT_DIRECTORY并不能直接获取到联系人照片的URI,这就导致了问题的出现。
解决方法:
根据Android开发文档中的代码示例,我们可以通过以下步骤来获取联系人照片的URI。
首先,我们需要构建一个联系人的URI,该URI是由ContactsContract.Contacts.CONTENT_URI和联系人的ID(contactId)组成的。具体代码如下:
Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);
接下来,我们可以通过使用Uri.withAppendedPath方法将联系人URI与ContactsContract.Contacts.Photo.CONTENT_DIRECTORY进行拼接,从而获取到联系人照片的URI。具体代码如下:
return Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
通过以上代码,我们可以解决如何获取联系人照片的URI的问题。