3

連絡先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てをに設定します。ImageViewsetImageURI

一部の写真では、他の連絡先の写真が表示され、次の例外が発生します。

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)

一部の連絡先で機能しない理由がわかりませんか?

しかし、ほとんどの場合、この例外を回避するために何をテストする必要があるかを知りたいですか?

4

1 に答える 1

1

メソッドを使用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);  
}
于 2012-10-15T22:55:03.620 に答える