2011-12-12 58 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

相關問題