我收到了联系人ID(ContactsContract.Contacts._ID
)
我通过检查相称的ContactsContract.Contacts.PHOTO_ID
是否为null
来确定照片是否可用。
如果不是我为照片构建了一个URI:
Uri personUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,id);
Uri photoUri=Uri.withAppendedPath(personUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
然后我使用photoUri
方法将ImageView
设置为setImageURI
。
对于某些照片,我看到其他联系人的图片我得到以下异常:
Unable to open content: content://com.android.contacts/contacts/1912/photo
java.io.FileNotFoundException: java.io.FileNotFoundException: No results.
at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:123)
at android.content.ContentProviderProxy.openAssetFile(ContentProviderNative.java:538)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:484)
at android.content.ContentResolver.openInputStream(ContentResolver.java:319)
at android.widget.ImageView.resolveUri(ImageView.java:521)
at android.widget.ImageView.setImageURI(ImageView.java:305)
我不确定为什么它不适用于某些联系人?
但大多数情况下我想知道我应该测试什么才能避免这种异常?
答案 0 :(得分:1)
您可以使用ContactsContract.Contacts.openContactPhotoInputStream(Context, Uri)
方法检查与联系人关联的照片是否可读。
E.g。
InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(getContext().getContentResolver(), personUri);
if (is == null) {
// Your contact doesn't have a valid photo
// i.e. use the default photo for your app
} else {
// This will always succeed when assigned to an ImageView!
return Uri photoUri=Uri.withAppendedPath(personUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
}