2010-04-21 68 views
0

任何人都可以幫助我在地址簿中添加新聯繫人並使用新的ContactsContract API批量應用他們嗎?我找不到適當的教程。使用ContactsContract批量添加聯繫人

我可以添加一個聯繫人。但批量更新失敗,並添加未知聯繫人。

目前我正在循環while while循環收集信息。的用戶編寫,其存儲在ArrayList<ContentProviderOperation>和應用,並

ContentProviderResult[] result = getContentResolver().applyBatch(ContactsContract.AUTHORITY, op_list); 

,但只有一個接觸與名稱更新和其他更新爲未知的接觸。

請與添加字段,如姓名,暱稱,手機,標題,電子郵件,Skype帳號,工作等國家

任何幫助的樣本代碼幫助嗎?謝謝 。

+0

與新項目的幫助下解決了這個http://developer.android.com/resources/articles /contacts.html – Pritam 2010-04-22 04:14:19

回答

0

這是我的代碼工作,根據您的需要爲其他值,您可以添加字段:

int backRefIndex = 0 

ArrayList<ContentProviderOperation> op_list = new ArrayList<ContentProviderOperation>(); 

op_list.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI).withValue(RawContacts.ACCOUNT_TYPE, null).withValue(RawContacts.ACCOUNT_NAME, null) 
          .build());  
       op_list.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, backRefIndex).withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "My Name").build()); 

op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI).withValueBackReference(Data.RAW_CONTACT_ID,backRefIndex).withValue(Phone.MIMETYPE,Phone.CONTENT_ITEM_TYPE).withValue(Phone.NUMBER,"1234567890").withValue(Phone.TYPE,Phone.TYPE_MOBILE).withValue(Phone.TYPE, Phone.TYPE_WORK).build()); 

try { 
    ContentProviderResult[] result = context.getContentResolver().applyBatchContactsContract.AUTHORITY, op_list); 
} catch (OperationApplicationException exp) { 
    exp.printStackTrace(); 
} catch (RemoteException exp) { 
    exp.printStackTrace(); 
} 
0

以下代碼將添加RawContact條目,然後添加名稱。要添加任何其他字段,請使用用於添加具有適當值的Name的類似代碼。

// Raw Contact 
    ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI); 
    builder.withValue(RawContacts.ACCOUNT_NAME, account.name); 
    builder.withValue(RawContacts.ACCOUNT_TYPE, account.type); 
    builder.withValue(RawContacts.SYNC1, username); 
    operationList.add(builder.build()); 

    // Name 
    builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); 
    builder.withValueBackReference(ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID, 0); 
    builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); 
    builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, entry.getName().getFullName().getValue()); 
    operationList.add(builder.build()); 

    try { 
     mContentResolver.applyBatch(ContactsContract.AUTHORITY, operationList); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

HTH!

+0

在此示例中,account.name,account.type和username來自哪裏? – Chris 2010-09-10 17:14:39

+0

您可以在使用任何特定帳戶時使用帳戶名稱和類型(即,如果您已同步gmail帳戶並想在其中添加一個聯繫人)。 Sync1選項是帳戶的用戶名,它用於存儲本地同步信息。 – Karan 2010-09-13 07:28:29

相關問題