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;
}

画像がGoogleの連絡先からのものである連絡先の画像を適切に表示します。プライマリ画像が 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_IDPHOTO_URI フィールドの代わりにクエリを実行し、次のコードを使用して URI を手動で取得し、それを画像に使用しようとしましたが、これも同じ結果になり、Google の画像は表示されますが、Facebook の画像は表示されません。

Uri puri = ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, photoid);
4

0 に答える 0