Android使用Contacts合同设置联系人的照片

Android使用Contacts合同设置联系人的照片,android,contactscontract,Android,Contactscontract,我正在寻找一种方法,以编程方式更新一个联系人的照片与给定的位图图像。我正在做以下事情,但什么也没发生。图片未设置,也未发生错误 Cursor cursor = provider.query(ContactsContract.RawContacts.CONTENT_URI, new String[]{ContactsContract.RawContacts.CONTACT_ID, ContactsContract.RawContacts.ACCOUNT_TYPE},

我正在寻找一种方法,以编程方式更新一个联系人的照片与给定的位图图像。我正在做以下事情,但什么也没发生。图片未设置,也未发生错误

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对象的大小实际上与下载的图像相同,因此似乎工作正常。

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

用于强制原始接触显示照片编辑。文档中有很好的使用示例