我正在尝试弄清楚如何为合并的联系人获取照片,以便在QuickContactBadge中显示。我一直在搜索和谷歌搜索,我在网上找到的所有东西都说如果联系人的默认图像来自Facebook同步,这是不可能的。然而,我发现的所有例子也参考Froyo或Gingerbread。
在ICS / JB时代还没有办法做到这一点吗?
This answer似乎是最有希望的,但评论似乎表明这是受欢迎的。 我在网上找到的所有东西都没有给我效用。
以下是我目前的代码:
public static Uri getContactPhotoUri(long ContactId) {
Uri person = ContentUris.withAppendedId(Contacts.CONTENT_URI, ContactId);
Uri photo = Uri.withAppendedPath(person, Contacts.Photo.CONTENT_DIRECTORY);
Cursor cur = App.ContentResolver().query(
Data.CONTENT_URI,
new String[] { Data._ID },
ContactsContract.Data.CONTACT_ID
+ "="
+ ContactId
+ " AND "
+ Data.MIMETYPE
+ "='"
+ Photo.CONTENT_ITEM_TYPE
+ "'", null, Data.IS_PRIMARY + " DESC");
Uri rv = null;
rv = (cur == null || !cur.moveToFirst())? null: photo;
if (cur != null) cur.close();
return rv;
}
它可以正确显示图像来自谷歌联系人的联系人的图像 对于主图像来自Facebook的联系人,图像 不 正确显示。
是否真的仍然没有可靠的方法来获取联系人的默认图像,无论图像来自哪里?
编辑(2013年1月18日):我也尝试按如下方式查询PHOTO_URI和PHOTO_THUMBNAIL_URI,结果相同。
public static String[] GroupMembersProjection = new String[] {
Contacts._ID,
Contacts.LOOKUP_KEY,
Contacts.DISPLAY_NAME_PRIMARY,
Contacts.PHOTO_THUMBNAIL_URI
};
public static Cursor getGroupMembers(int groupid, String sort) {
String ord;
if (sort.equals("A")) { ord = Contacts.DISPLAY_NAME_PRIMARY; }
else { ord = Contacts.TIMES_CONTACTED + " DESC"; /* SORT = "U"; DEFAULT */ }
ContentResolver cr = App.ContentResolver();
Cursor contacts = cr.query(Data.CONTENT_URI,
GroupMembersProjection,
GroupMembership.GROUP_ROW_ID + "=" + groupid, null, ord);
return contacts;
}
此外,我尝试查询PHOTO_ID
而不是PHOTO_URI字段,然后使用以下代码手动获取URI并将其用于图片,但这也会产生相同的结果,显示谷歌图片,但不是Facebook的。
Uri puri = ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, photoid);