我正在尝试获取 WhatsApp 个人资料照片,并且我正在为所有拥有 WhatsApp 的联系人获取 photoUri。
但是当我试图展示 photoUri 时,我得到了以下异常:
W/ImageView: Unable to open content: content://com.android.contacts/raw_contacts/12/display_photo
java.io.FileNotFoundException: No photo file found for ID 0
我添加了一个代码来检查文件是否存在,并且我发现该文件存在,所以不清楚为什么会出现上述异常。
这是我用来获取照片 URI 的代码:
public Uri getPhotoUri(long contactId) {
Uri photoUri=null;
ContentResolver contentResolver = getContext().getContentResolver();
Cursor photoCur = contentResolver.query(
ContactsContract.RawContacts.CONTENT_URI,null,
ContactsContract.RawContacts.CONTACT_ID + "=" + contactId + " AND " +
ContactsContract.RawContacts.ACCOUNT_TYPE + "= ?",
new String[]{"com.whatsapp"}, ContactsContract.RawContacts.CONTACT_ID);
if (photoCur != null && photoCur.moveToFirst()) {
Uri photoId = ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, contactId);
photoUri = Uri.withAppendedPath(photoId, ContactsContract.RawContacts.DisplayPhoto.CONTENT_DIRECTORY);
}
return photoUri;
}
这是我用来检查文件是否存在的代码:
if (customer.getContactPhotoUri() != null) {
String fullPath = customer.getContactPhotoUri().toString();
File path = new File(fullPath);
if (path.exists()) {
Log.i("ZCF", "File Exists: " + fullPath);
imageView.setImageURI(customer.getContactPhotoUri());
} else {
Log.i("ZCF", "File does not Exists: " + fullPath);
imageView.setImageDrawable(context.getDrawable(R.drawable.ic_person_blue_24dp));
}
} else {
imageView.setImageDrawable(context.getDrawable(R.drawable.ic_person_blue_24dp));
}
这段代码的结果是:
I/ZCF:文件存在:content://com.android.contacts/raw_contacts/12/display_photo