Android 2.3.3
我在其中一个例子中找到了以下代码......
String image = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI));
if (image != null) {
contactViewHolder.imgContact.setImageURI(Uri.parse(image));
} else {
contactViewHolder.imgContact
.setImageResource(R.drawable.addcontactsmall2);
}
但是,当我尝试运行应用程序时,它会给我一个IllegalStateException。但是,在其他示例中,我没有在其他地方找到此URI。这是获取联系人照片的正确方法吗?
这是我将光标放在PHOTO_URI :::
上时所看到的String android.provider.ContactsContract.ContactsColumns.PHOTO_URI =“photo_uri”
public static final String PHOTO_URI
Added in API level 11
A URI that can be used to retrieve the contact's full-size photo.
If PHOTO_FILE_ID is not null, this will be populated with a URI based off CONTENT_URI.
Otherwise, this will be populated with the same value as PHOTO_THUMBNAIL_URI.
A photo can be referred to either by a URI (this field) or by ID (see PHOTO_ID).
If either PHOTO_FILE_ID or PHOTO_ID is not null, PHOTO_URI and PHOTO_THUMBNAIL_URI shall not be null (but not necessarily vice versa).
Thus using PHOTO_URI is a more robust method of retrieving contact photos.
Type: TEXT
Constant Value: "photo_uri"
答案 0 :(得分:4)
希望这会对你有帮助(联系人由getId()标识:
/**
* @return the photo URI
*/
public Uri getPhotoUri() {
try {
Cursor cur = this.ctx.getContentResolver().query(
ContactsContract.Data.CONTENT_URI,
null,
ContactsContract.Data.CONTACT_ID + "=" + this.getId() + " AND "
+ ContactsContract.Data.MIMETYPE + "='"
+ ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'", null,
null);
if (cur != null) {
if (!cur.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, Long
.parseLong(getId()));
return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
}
用法是:
Uri u = objItem.getPhotoUri();
if (u != null) {
mPhotoView.setImageURI(u);
} else {
mPhotoView.setImageResource(R.drawable.ic_contact_picture_2);
}