Android 使用 ContactsContract 设置联系人的照片

Android set contact's photo with 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 加载,似乎工作正常,因为字节对象实际上是下载图像的大小。

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

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