android - 如何以编程方式添加联系人

标签 android

<分区>

如何使用编程添加联系人我正在尝试这个:

public void addContact(Contact contact)
    ContentValues values = new ContentValues();
    values.put("contact_id", contact.getContactId());
    values.put("lookup", contact.getLookupKey());
    values.put("mimetype", StructuredName.CONTENT_ITEM_TYPE);
    values.put("data1", contact.getStructuredName().getDisplayName());
    values.put("data2", contact.getStructuredName().getGivenName());
    values.put("data3", contact.getStructuredName().getFamilyName());
    values.put("data4", contact.getStructuredName().getPrefix());
    values.put("data5", contact.getStructuredName().getMiddleName());
    values.put("data6", contact.getStructuredName().getSuffix());
    context.getContentResolver().insert(Data.CONTENT_URI, values);
    }

最佳答案

最好的方法是使用 ContentProviderOperation,而不是使用 ContentValues。使用该功能:

private void addContact() {
    ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>(); 
    operationList.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
            .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 
            .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) 
            .build()); 

    // first and last names 
    operationList.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
            .withValueBackReference(Data.RAW_CONTACT_ID, 0) 
            .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) 
            .withValue(StructuredName.GIVEN_NAME, "Second Name") 
            .withValue(StructuredName.FAMILY_NAME, "First Name") 
            .build()); 

    operationList.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
            .withValueBackReference(Data.RAW_CONTACT_ID, 0) 
            .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
            .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "09876543210")
            .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, Phone.TYPE_HOME)
            .build());
    operationList.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
            .withValueBackReference(Data.RAW_CONTACT_ID, 0)

            .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
            .withValue(ContactsContract.CommonDataKinds.Email.DATA, "abc@xyz.com")
            .withValue(ContactsContract.CommonDataKinds.Email.TYPE, Email.TYPE_WORK)
            .build());

    try{ 
        ContentProviderResult[] results = getContentResolver().applyBatch(ContactsContract.AUTHORITY, operationList); 
    }catch(Exception e){ 
        e.printStackTrace(); 
    } 
}

注意:请将其导入您的类文件import android.provider.ContactsContract.Data;

祝你好运。

关于android - 如何以编程方式添加联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28961003/

相关文章:

android - 如何通过电话号码获取联系人 ID

android - TextVew 在提供协助信息时抛出异常

php - 使用 Intent 的 EXTRA_TEXT 中没有数据

android - 创建一个没有透明度的波纹可绘制对象

java - 如何清除android中的动画?

android - 如何制作简单的智能手机控制电源开关?

android - 如何启动预填了 "to"字段的电子邮件应用程序?

android - 使用 MSBuild 构建 Delphi Android 项目的问题

Android - 在列表 ListView 的末尾添加最后一项

java - 从对话框 fragment 调用父 fragment 方法