我正在开发一个应用程序,我需要以编程方式存储联系人。我已成功保存联系人但无法保存联系人图像。
我没有找到任何相同的例子。
任何帮助将不胜感激。
答案 0 :(得分:3)
在初始插入期间保存照片
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
...
int rawContactInsertIndex = ops.size();
// intial setup
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(RawContacts.ACCOUNT_TYPE, accountType)
.withValue(RawContacts.ACCOUNT_NAME, accountName)
.build());
// add name with rawId backreference
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.DISPLAY_NAME, "John Smith")
.build());
// add the photo
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo. CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, bitmapByteArray
.build());
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
其中bitmapByteArray是您要附加到联系人的位图的字节数组
从位图图像中获取字节数组的一种方法
public byte[] toByteArray(Bitmap bitmap) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, stream);
return stream.toByteArray();
}