2012-10-30 147 views
3

當我想創建新聯繫人時,我想我必須設置RAW_CONTACT_ID。如果不是這些代碼如何表現良好。我對嗎?如果不是,它怎麼知道這些數據屬於同一個聯繫人。如果是,如何設置RAW_CONTACT_ID?也許這個問題可以這樣說:我怎麼能得到不存在的新RAW_CONTACT_ID?然後發佈我的代碼(我設置0〜RAW_CONTACT_ID):如何在創建新聯繫人時設置RAW_CONTACT_ID聯繫人

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()); 

    // ------------------------------------------------------ Names 
    if (displayName != null) { 
     ops.add(ContentProviderOperation 
       .newInsert(ContactsContract.Data.CONTENT_URI) 
       .withValueBackReference(
         ContactsContract.Data.RAW_CONTACT_ID, 0) 
       .withValue(
         ContactsContract.Data.MIMETYPE, 
         ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
       .withValue(
         ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, 
         displayName).build()); 
    } 

    // ------------------------------------------------------ Mobile Number 
    if (mobileNumber != null) { 
     ops.add(ContentProviderOperation 
       .newInsert(ContactsContract.Data.CONTENT_URI) 
       .withValueBackReference(
         ContactsContract.Data.RAW_CONTACT_ID, 0) 
       .withValue(
         ContactsContract.Data.MIMETYPE, 
         ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 
       .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, 
         mobileNumber) 
       .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, 
         ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) 
       .build()); 
    } 
    context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 

回答

2

你必須如下使用int rawContactInsertIndex = ops.size()。

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(Data.CONTENT_URI).withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex).withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) 
       .withValue(StructuredName.DISPLAY_NAME, personalVcard.getFirstName()).build()); 
+0

tks!it works! – blackdog

0

我想我在JB上發現了一些奇怪的問題,它使用的代碼在以前的android版本上運行良好。當您要求創建共享相同基本名稱的聯繫人時,創建不會按照它應該的方式進行,並且withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,0)返回的原始聯繫人ID似乎是相同的。

例如,嘗試創建Contact1,Contact2和Contact3:奇怪的東西開始。您最有可能看不到聯繫人,但嘗試使用API​​刪除聯繫人會導致告訴您聯繫實際存在。

我不確定這是否是破壞我的Jelly Bean平臺的結果,或者它是Android構建中的常見問題。請注意,我正在開發一個正在開發的平臺。

有沒有人見過這個,例如4.1.2?

0

這段代碼將保存聯繫人姓名與手機號碼。

private void saveContact() { 
    this.sessionpref.setPreference("Saved", "Done"); 
    ArrayList<ContentProviderOperation> ops = new ArrayList(); 
    ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI) 
     .withValue("account_type", null).withValue("account_name", null).build()); 

    if (this.DisplayName != null) { 
    ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
     .withValueBackReference("raw_contact_id", 0) 
     .withValue("mimetype", "vnd.android.cursor.item/name") 
     .withValue("data1", this.DisplayName) 
     .build()); 
    } else { 
    Toast.makeText(getApplicationContext(), "Contact Exist", 3000).show(); 
    } 

    if (this.MobileNumber != null) { 
    ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
     .withValueBackReference("raw_contact_id", 0) 
     .withValue("mimetype", "vnd.android.cursor.item/phone_v2") 
     .withValue("data1", this.MobileNumber).withValue("data2", Integer.valueOf(2)) 
     .build()); 
    } else { 
    Toast.makeText(getApplicationContext(), "Contact Exist", 3000).show(); 
    } 
    try { 
    getContentResolver().applyBatch("com.android.contacts", ops); 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
} 
相關問題