13

我正在嘗試直接向Android 2.2聯繫人添加新聯繫人在Android中插入聯繫人與ContactsContract

//this code doesn't work  
ContentValues cv=new ContentValues(); 
cv.put(ContactsContract.Contacts.DISPLAY_NAME, "TESTEST"); 
Uri u= getContentResolver().insert(ContactsContract.Contacts.CONTENT_URI, cv); 

給我錯誤「聚合聯繫人自動創建」。 我在做什麼錯?

這將調用Android的添加聯繫人的形式

//this code works but it's not ideal 
Intent i = new Intent(Intent.ACTION_INSERT_OR_EDIT); 
i.setType(Contacts.CONTENT_ITEM_TYPE); 
i.putExtra(Insert.NAME, "TESTTEST"); 
i.putExtra(Insert.PHONE, "209384"); 
startActivity(i); 

我無法弄清楚如何向它發送一個名字和姓氏 - 只有一個「姓名」,它把第一名稱框。此外,我想將郵政編碼分成街道,城市,州和郵政編碼,現在這些郵政編碼都已放入街道郵箱。

回答

3

問題已解決。發現這個問題;工作答案是阿爾斯:Inserting contacts in Android 2.2

+4

至於我可以告訴添加聯繫方式, 「工作回答」 直接增加了接觸。但是,在上面的問題中,您正在通過意向啓動本地「添加聯繫人」活動。這是否意味着您已經計算出如何通過ContactsContract傳遞聯繫人數據?如果是,你願意分享你是如何做到的嗎? – Dino 2011-10-17 16:31:47

2

這個答案似乎是有幫助的:https://stackoverflow.com/a/3279117/1259161

它描述瞭如何使用ContractsContract的API調用聯繫人條目的形式。這些API還應該允許您使用ContactsContract.CommonDataKinds.StructuredPostal指定所需的額外字段。

20

在android系統

import java.util.ArrayList; 

import android.app.Activity; 
import android.content.ContentProviderOperation; 
import android.content.ContentProviderResult; 
import android.content.OperationApplicationException; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.RemoteException; 
import android.provider.ContactsContract; 
import android.provider.ContactsContract.CommonDataKinds.Phone; 
import android.provider.ContactsContract.CommonDataKinds.StructuredName; 
import android.provider.ContactsContract.Contacts.Data; 
import android.provider.ContactsContract.RawContacts; 

public class DemoAddAddressBook extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    /* 
    * Uri newPerson = addContactName(); 
    * 
    * addMobilePhoneNo(newPerson); addEmail(newPerson); 
    * addPostalAddress(newPerson); addOrganization(newPerson); 
    */ 

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

    //Phone Number 
    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") 
    .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) 
    .withValue(Phone.TYPE, "1").build()); 

    //Display name/Contact name 
    ops.add(ContentProviderOperation 
    .newInsert(ContactsContract.Data.CONTENT_URI) 
    .withValueBackReference(Data.RAW_CONTACT_ID, 
     rawContactInsertIndex) 
    .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) 
    .withValue(StructuredName.DISPLAY_NAME, "Mike Sullivan") 
    .build()); 
    //Email details 
    ops.add(ContentProviderOperation 
    .newInsert(ContactsContract.Data.CONTENT_URI) 
    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 
     rawContactInsertIndex) 
    .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE) 
    .withValue(ContactsContract.CommonDataKinds.Email.DATA, "[email protected]") 
    .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE) 
    .withValue(ContactsContract.CommonDataKinds.Email.TYPE, "2").build()); 


    //Postal Address 

    ops.add(ContentProviderOperation 
     .newInsert(ContactsContract.Data.CONTENT_URI) 
     .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 
     rawContactInsertIndex) 
     .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.StructuredPostal.POBOX, "Postbox") 

     .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.StructuredPostal.STREET, "street") 

     .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.StructuredPostal.CITY, "city") 

     .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.StructuredPostal.REGION, "region") 

     .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, "postcode") 

     .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, "country") 

     .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, "3") 


     .build()); 


    //Organization details 
    ops.add(ContentProviderOperation 
    .newInsert(ContactsContract.Data.CONTENT_URI) 
    .withValueBackReference(Data.RAW_CONTACT_ID, 
     rawContactInsertIndex) 
    .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE) 
    .withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, "Devindia") 
    .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE) 
    .withValue(ContactsContract.CommonDataKinds.Organization.TITLE, "Developer") 
    .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE) 
    .withValue(ContactsContract.CommonDataKinds.Organization.TYPE, "0") 

    .build()); 
    //IM details 
    ops.add(ContentProviderOperation 
     .newInsert(ContactsContract.Data.CONTENT_URI) 
     .withValueBackReference(Data.RAW_CONTACT_ID, 
     rawContactInsertIndex) 
     .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.Im.DATA, "ImName") 
     .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.Im.DATA5, "2") 


     .build()); 
    try { 
    ContentProviderResult[] res = getContentResolver().applyBatch(
    ContactsContract.AUTHORITY, ops); 
    } catch (RemoteException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } catch (OperationApplicationException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

} 
} 
+0

你是我的節日! +1,非常感謝! – 2016-04-08 21:57:53

+0

這也適用於多個電話/電子郵件/ ...,對吧?另外,你從哪裏得到這些?是否有更多的領域可以使用,這裏沒有提到(答案是4年前,所以我猜事情可能已經改變)? – 2017-06-22 07:29:18

+0

爲什麼使用「rawContactInsertIndex」,如果它始終爲0 ....? – 2017-11-12 20:25:56

1
ContentValues p=new ContentValues(); 
    p.put(RawContacts.ACCOUNT_TYPE, "com.google"); 
    p.put(RawContacts.ACCOUNT_NAME, "email"); 
    Uri rowcontect= getContentResolver().insert(RawContacts.CONTENT_URI, p); 
    long rawcontectid=ContentUris.parseId(rowcontect); 

    ContentValues value = new ContentValues(); 
    value.put(Data.RAW_CONTACT_ID,rawcontectid); 
    value.put(android.provider.ContactsContract.Data.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE); 
    value.put(StructuredName.DISPLAY_NAME, "kunja gajjar"); 
    getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, value); 

    //adding the contents to the data 
    ContentValues ppv=new ContentValues(); 
    ppv.put(android.provider.ContactsContract.Data.RAW_CONTACT_ID, rawcontectid); 
    ppv.put(android.provider.ContactsContract.Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); 
    ppv.put(Phone.NUMBER, "975657789"); 
    ppv.put(Phone.TYPE, Phone.TYPE_MOBILE); 
    this.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, ppv); 
1
ContentValues cv = new ContentValues(); 
cv.put(People.NAME, e1.getText().toString()); 

// e1.getText().tostring() is Contact name 

Uri u = getContentResolver().insert(People.CONTENT_URI, cv); 

Uri pathu = Uri.withAppendedPath(u, People.Phones.CONTENT_DIRECTORY);  

cv.clear(); 

cv.put(People.NUMBER, e2.getText().toString()); 

// e2.getText().tostring() is Contact number 

getContentResolver().insert(pathu, cv); 

Toast.makeText(getApplicationContext(), "Contact Added",Toast.LENGTH_LONG).show(); 
相關問題