2011-12-12 56 views
5

通过下面的代码片段,我可以将所有联系人与REST API同步。 这很棒,一切正常。我可以添加姓名和电话号码。如何在ContentProviderOperation中添加联系人图片?

不幸的是,我现在正在努力没有成功添加从SD卡的图片(我得到一个位图或可绘制)

有人能指出我的方式来实现这一目标或者给我一些线索?

非常感谢!

这里是示例代码我目前使用的:

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
int rawContactInsertIndex = ops.size(); 

ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI) 
    .withValue(RawContacts.ACCOUNT_TYPE, null) 
    .withValue(RawContacts.ACCOUNT_NAME,null) 
    .build()); 
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex) 
    .withValue(Data.MIMETYPE,Phone.CONTENT_ITEM_TYPE) 
    .withValue(Phone.NUMBER, "9X-XXXXXXXXX") 
    .build()); 
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
    .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) 
    .withValue(Data.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE) 
    .withValue(StructuredName.DISPLAY_NAME, "Mike Sullivan") 
    .build()); 
ContentProviderResult[] res = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 

回答

11

请试试这个

Bitmap bmImage = BitmapFactory.decodeFile(imagePath); 
        ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
        bmImage.compress(Bitmap.CompressFormat.JPEG, 80, baos); 
        byte[] b = baos.toByteArray(); 



        ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
          .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
          .withValue(ContactsContract.Data.MIMETYPE, 
            ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE) 
            .withValue(ContactsContract.CommonDataKinds.Photo.DATA15,b) 
            .build()); 
+0

完美!非常感谢! –

+0

ContactsContract.CommonDataKinds.Photo.PHOTO是可读的等同于ContactsContract.CommonDataKinds.Photo.DATA15 – Roel

相关问题