Android 插入带有特定联系人ID的联系人

Android 插入带有特定联系人ID的联系人,android,contacts,android-contacts,contactscontract,rawcontacts,Android,Contacts,Android Contacts,Contactscontract,Rawcontacts,我正在尝试在android中创建一个具有特定联系人id的rawcontact,因此它链接到具有相同联系人id(而不是rawcontactid)的其他rawcontacts 问题是我无法将联系人ID插入ContentProviderOperations。 使用以下代码返回“插入失败” ArrayList ops=new ArrayList(); int id=(int)contactId; 字符串条件=Data.RAW_CONTACT_ID+“=?”; 字符串[]参数={“+id}; 试一试{ 字

我正在尝试在android中创建一个具有特定联系人id的rawcontact,因此它链接到具有相同联系人id(而不是rawcontactid)的其他rawcontacts

问题是我无法将联系人ID插入ContentProviderOperations。 使用以下代码返回“插入失败”

ArrayList ops=new ArrayList();
int id=(int)contactId;
字符串条件=Data.RAW_CONTACT_ID+“=?”;
字符串[]参数={“+id};
试一试{
字符串accountName=account.name;
字符串accountType=account.type;
添加(ContentProviderOperation.newInsert(RawContacts.CONTENT\uURI)
.withValue(RawContacts.ACCOUNT\u类型,accountType)
.withValue(rawscontacts.ACCOUNT_NAME,accountName).build());
操作添加(getAccountGroupOperation(account));
add(ContentProviderOperation.newInsert(Data.CONTENT\u URI)
.带ValueBackReference(Data.RAW\u CONTACT\u ID,0)
.withValue(Data.CONTACT_ID,“+ID)
.withValue(Data.MIMETYPE、StructuredName.CONTENT\u ITEM\u TYPE)
.withValue(StructuredName.DISPLAY\u NAME,contact.getName())
.build());
MyApplication.getAppContext().getContentResolver()
.applyBatch(联系合同管理局,ops);
}捕获(例外e){
...
}

我做错了什么?

你不能这样做。Android联系人聚合器自动将原始联系人聚合为联系人。您不必担心将原始联系人分配给联系人。

可以这样做,但不能以您想要的方式进行。通过将类型设置为type_KEEP_,将两个原始联系人ID添加到AggregationExceptions表中,可以使联系人应用程序连接两个原始联系人

    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    int id = (int) contactId;

    String condition = Data.RAW_CONTACT_ID + "=?";
    String[] parameters = { "" + id };

    try {

        String accountName = account.name;
        String accountType = account.type;
        ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
                .withValue(RawContacts.ACCOUNT_TYPE, accountType)
                .withValue(RawContacts.ACCOUNT_NAME, accountName).build());
        ops.add(getAccountGroupOperation(account));

        ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
                .withValueBackReference(Data.RAW_CONTACT_ID, 0)
                .withValue(Data.CONTACT_ID, "" + id)
                .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
                .withValue(StructuredName.DISPLAY_NAME, contact.getName())
                .build()); 
        MyApplication.getAppContext().getContentResolver()
                .applyBatch(ContactsContract.AUTHORITY, ops);
    } catch (Exception e) {
        ...
    }