[英]Insert contact in Android with ContactsContract
I am trying to add a new contact to the Android 2.2 contacts directly. 我正在尝试直接向Android 2.2联系人添加新联系人。
//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);
gives me the error "Aggregate contacts are created automatically." 给我错误“自动创建聚合联系人”。 What am I doing wrong?
我究竟做错了什么?
This calls the Android's add contact form : 这会调用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);
I can't figure out how to send it a first name and a last name - only a 'name' which it puts in the first name box. 我无法弄清楚如何发送它的名字和姓氏 - 它只是一个'名字',它放在名字框中。 Also I'd like to separate the postal code into street, city, state, and zip which right now is all being put into the street box.
此外,我想将邮政编码分为街道,城市,州和邮政编码,现在这些都被放入街道邮箱。
Add Contact Details in android 在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, "abc@aho.com")
.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();
}
}
}
This answer seems to be helpful: https://stackoverflow.com/a/3279117/1259161 这个答案似乎很有帮助: https : //stackoverflow.com/a/3279117/1259161
It describes how to invoke the contacts entry form using the ContractsContract APIs. 它描述了如何使用ContractsContract API调用联系人条目表单。 These APIs ought to also let you make use of ContactsContract.CommonDataKinds.StructuredPostal to specify the extra fields you want.
这些API还应该允许您使用ContactsContract.CommonDataKinds.StructuredPostal来指定所需的额外字段。
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);
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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.