我试图弄清楚如何获取合并联系人的照片,以显示在 QuickContactBadge 中。我一直在搜索和搜索,我可以在网上找到的所有内容都表明,如果联系人的默认图像来自 Facebook 同步,这是不可能的。然而,我发现的所有示例也都参考了 Froyo 或 Gingerbread。
在 ICS/JB 时代还没有办法做到这一点吗?
这个答案似乎是最有希望的,但评论似乎说它是命中或错过。我在网上找到的所有东西都不适合我。
这是我目前拥有的代码:
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);