2

我试图弄清楚如何获取合并联系人的照片,以显示在 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);
4

0 回答 0