Android ImageView не может получить доступ к некоторым фотографиям контактов - PullRequest
3 голосов
/ 03 июня 2011

Я получаю идентификатор контакта (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)

Я не уверен, почему он не работает для некоторых контактов?

Но в основном я хотел бы знать, что я должен проверить, чтобычтобы избежать этого исключения?

1 Ответ

1 голос
/ 16 октября 2012

Вы можете использовать метод ContactsContract.Contacts.openContactPhotoInputStream(Context, Uri), чтобы проверить, является ли фотография, связанная с контактом, читабельной или нет.

Е.Г.

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);  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...