更新/设置自己的用户个人资料图片

时间:2015-08-21 08:55:06

标签: android contactscontract

我知道如何从ContentResolver检索用户个人资料。如果我有位图,如何将其设置为用户个人资料图片(替换它或设置它,如果不存在)?

我加载用户个人资料如下:

Uri dataUri = Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI, ContactsContract.Contacts.Data.CONTENT_DIRECTORY);
String[] selection = new String[]
{
        ContactsContract.Profile._ID,
        ContactsContract.Profile.DISPLAY_NAME,
        ContactsContract.Profile.PHOTO_URI,
        ContactsContract.Profile.LOOKUP_KEY
};

Cursor cursor = MainApp.get().getContentResolver().query(
        dataUri,
        selection,
        null,
        null,
        null);

if (cursor != null)
{
    int id = cursor.getColumnIndex(ContactsContract.Profile._ID);
    int name = cursor.getColumnIndex(ContactsContract.Profile.DISPLAY_NAME);
    int photoUri = cursor.getColumnIndex(ContactsContract.Profile.PHOTO_URI);
    int lookupKey = cursor.getColumnIndex(ContactsContract.Profile.LOOKUP_KEY);

    try
    {
        if (cursor.moveToFirst())
        {
            int phId = cursor.getInt(id);
            mName = cursor.getString(name);
            mImageUri = cursor.getString(photoUri);
            mLookupKey = cursor.getString(lookupKey);

            mExists = true;
        }
    }
    finally
    {
        cursor.close();
    }
}

1 个答案:

答案 0 :(得分:0)

以下是更新或创建个人资料图片的方法,实际上它的工作方式与更新普通联系人图片的方式相同。我在其他地方遇到了问题...

不要使用我的UserProfile,只需交换它们并传递原始id。

private static void updatePhoto(UserProfile profile, Bitmap bitmap, ...)
{
    byte[] photo = ImageUtil.convertImageToByteArray(bitmap, true);

    ContentValues values = new ContentValues();
    int photoRow = -1;
    String where = ContactsContract.Data.RAW_CONTACT_ID + " = " + profile.getRawId() + " AND " + ContactsContract.Data.MIMETYPE + "=='" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'";
    Cursor cursor = MainApp.get().getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, where, null, null);
    int idIdx = cursor.getColumnIndexOrThrow(ContactsContract.Data._ID);
    if (cursor.moveToFirst()) {
        photoRow = cursor.getInt(idIdx);
    }
    cursor.close();

    values.put(ContactsContract.Data.RAW_CONTACT_ID, profile.getRawId());
    values.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
    values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, photo);
    values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);

    if (photoRow >= 0) {
        MainApp.get().getContentResolver().update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.Data._ID + " = " + photoRow, null);
    } else {
        MainApp.get().getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
    }

    ...
}