如何合并联系人的照片?

时间:2013-01-16 07:46:46

标签: android facebook contacts

我正在尝试弄清楚如何为合并的联系人获取照片,以便在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);

0 个答案:

没有答案