Android通过ContactsContract设置联系人的照片

时间:2015-03-03 21:10:17

标签: android contactscontract

我正在寻找一种以给定的位图图像以编程方式更新联系人照片的方法。我正在做以下事情,但没有任何反应。既没有设置图片也没有出错。

Cursor cursor = provider.query(ContactsContract.RawContacts.CONTENT_URI,
                new String[]{ContactsContract.RawContacts.CONTACT_ID, ContactsContract.RawContacts.ACCOUNT_TYPE},
                ContactsContract.RawContacts.ACCOUNT_TYPE +"=?",
                new String[]{accountType},
                null);

        // Only one entry
        if(cursor.moveToFirst())
        {
            id = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID));
        }

        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bmp.compress(CompressFormat.JPEG, 100, stream);
        byte[] bytes = stream.toByteArray();

        ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
                .withValueBackReference(Data.RAW_CONTACT_ID, Integer.parseInt(id))
                .withValue(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE)
                .withValue(Photo.PHOTO, bytes)
                .build());
    }
    provider.applyBatch(ops);

图像从REST api加载,似乎工作正常,因为bytes对象实际上是下载图像的大小。

1 个答案:

答案 0 :(得分:0)

您的代码将照片数据行连接到特定的原始联系人,但它不会启动任何会更改该原始联系人和相应联系人的显示照片的过程。

使用ContactsContract.RawContacts.DisplayPhoto进行强制原始联系人显示照片编辑。文档中有很好的用法示例。