插入具有特定联系人 ID 的 RawContact

Posted

技术标签:

【中文标题】插入具有特定联系人 ID 的 RawContact【英文标题】:Insert RawContact with a specific contactid 【发布时间】:2012-02-03 05:38:47 【问题描述】:

我正在尝试在 android 中创建一个具有特定联系人 ID 的 rawcontact,因此它与具有相同联系人 ID(不是 rawcontactid)的其他 rawcontacts 相关联。

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

    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) 
        ...
    

我做错了什么?

【问题讨论】:

【参考方案1】:

可以做到这一点,但不是按照你想要的方式。您可以通过将类型设置为 TYPE_KEEP_TOGETHER 将两个原始联系人 ID 添加到 AggregationExceptions 表来使联系人应用程序加入两个原始联系人

http://developer.android.com/reference/android/provider/ContactsContract.AggregationExceptions.html

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于插入具有特定联系人 ID 的 RawContact的主要内容,如果未能解决你的问题,请参考以下文章

如何使用联系人 id 和查找键获取 rawcontact id

在 Android 中获取 RawContact 照片的 URI

添加 RawContact 使其聚合到现有联系人

删除特定 RawContact 内容目录条目

从 RawContact Android 读取电话号码

检索附加了特定帐户的所有联系人