5

我的应用程序数据库中存储的数字很少。我想在联系人应用程序中匹配这些号码,并使用 mimetype 更新该联系人。基本上 Whatsapp 是怎么做的。他们同步所有联系人,并且他们的应用程序图标开始联系。

我已经完成了同步部分,如果我添加了新联系人,那么我可以在联系人中显示我的应用程序图标。但我的要求是只更新现有的联系人。

这是我试图更新联系人的内容,

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

        ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true))
            .withValueBackReference(Data.RAW_CONTACT_ID,id)
            .withValue(Data.MIMETYPE, MIMETYPE)
            .withValue(Data.DATA1, "Username")
            .withValue(Data.DATA2, "Ite's Me")
            .build());

        try {
            context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
        }
        catch (Exception e) {
            e.printStackTrace();
        }

rawContactid

Cursor cursor = context.getContentResolver().query(Data.CONTENT_URI, new String[] {Data.RAW_CONTACT_ID, Data.DISPLAY_NAME, Data.MIMETYPE, Data.CONTACT_ID }, 
             ContactsContract.CommonDataKinds.Phone.NUMBER + "= ?", 
                     new String[] {phonenumb}, null);

我无法在该联系人中添加连接。我究竟做错了什么。有人可以帮我解决这个问题。

提前致谢。

4

2 回答 2

0

将您的个人数据插入新的 raw_contact,然后使用 agregationexception 将其合并到您的 cotacts 列表中的现有 raw_contact._id。

ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
        ContentProviderOperation.Builder builder = ContentProviderOperation.newUpdate(ContactsContract.AggregationExceptions.CONTENT_URI);
        builder.withValue(ContactsContract.AggregationExceptions.TYPE, ContactsContract.AggregationExceptions.TYPE_KEEP_TOGETHER);
        builder.withValue(ContactsContract.AggregationExceptions.RAW_CONTACT_ID1, raw1);
        builder.withValue(ContactsContract.AggregationExceptions.RAW_CONTACT_ID2, raw2);
        ops.add(builder.build());
于 2016-12-27T04:20:06.480 回答
0

问题是您withValueBackReference用来引用原始联系人 ID。这将尝试使用您的参数作为批处理中先前操作的索引来获取原始联系人的 id,即如果 id=0,它将引用第一个操作,如果它是新原始操作的插入联系人,使用生成的 id 作为联系人数据插入的原始联系人 id。您想在withValue此处使用,因为您已经拥有原始联系人 ID。

于 2015-12-08T15:10:19.700 回答