Android以编程方式保存联系人图像

时间:2011-11-22 15:18:26

标签: android

我正在开发一个应用程序,我需要以编程方式存储联系人。我已成功保存联系人但无法保存联系人图像。

我没有找到任何相同的例子。

任何帮助将不胜感激。

1 个答案:

答案 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();
}