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(); 
相关问题