2011-06-22 100 views
2

我正在使用ContactsContract通過將用戶發送到「新聯繫人」意圖來插入新聯繫人。我使用的代碼是:Android:使用ContactsContract插入意圖設置聯繫人照片

Intent i = new Intent(Intent.ACTION_INSERT); 

i.setType(Contacts.CONTENT_TYPE); 
i.putExtra(Insert.NAME, "Some Contact Name"); 
i.putExtra(Insert.EMAIL, "[email protected]"); 
i.putExtra(Insert.PHONE, "123-456-7890"); 

startActivity(i); 

不過,我也需要通過某種方式以本地存儲的照片通過(在res /繪製),以顯示在這個「新接觸」的意圖。我希望有一個簡單的方法來做到這一點,如

i.putExtra(Insert.PHOTO, uri_to_photo); 

但這顯然不起作用。我發現this thread詳細說明了如何爲已存在的聯繫人設置照片(通過Jak的setPhoto()方法),但沒有說明如何傳遞照片以顯示爲「新聯繫人」意圖上的聯繫人圖標。

將照片(希望作爲URI的照片)傳遞給「新聯繫人」意圖的最佳方式是什麼?

在此先感謝。

回答

0

首先使用ContentProviderOperation的方式來插入新的聯繫人。

final ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
     ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
       .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 
       .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) 
       .build()); 

     Bitmap bmp = YCardImageLoader.getInstance().getBitmapByCache(mTask.getImageUrl()); 
     if (bmp != null) { 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      bmp.compress(CompressFormat.JPEG, 100, stream); 
      byte[] bytes = stream.toByteArray(); 

      ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
        .withValueBackReference(Data.RAW_CONTACT_ID, 0) 
        .withValue(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE) 
        .withValue(Photo.PHOTO, bytes) 
        .build()); 
     } 

     ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
       .withValueBackReference(Data.RAW_CONTACT_ID, 0) 
       .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) 
       .withValue(StructuredName.DISPLAY_NAME, mContact.getName()) 
       .build()); 

     ContentProviderResult[] result = SaveToPbkActivity.this.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 

然後得到結果URI作爲ACTION_EDIT URI,把其他額外,startActivityForResult(意向,REQUEST_INSERT_CONTACT)。

 Intent editIntent = new Intent(Intent.ACTION_EDIT); 
     uri = result[0].uri; 
     editIntent.setDataAndType(uri, Contacts.CONTENT_ITEM_TYPE); 
     editIntent.putExtra("finishActivityOnSaveCompleted", true); 
     putExtras(editIntent, null); 
     startActivityForResult(editIntent, REQUEST_INSERT_CONTACT); 

,因爲我們第一次插入,我們將刪除它時,resultCode爲!= RESULT_OK

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    if (requestCode == REQUEST_INSERT_CONTACT) { 
     if (resultCode == RESULT_OK) { 
      //SAVE SUCCESS 
     } else { 
      ContentResolver cr = getContentResolver(); 
      cr.delete(uri, null, null); 
     } 
    } } 

最後對不起,我的英語!

相關問題