如何更新Android联系人公司



我最近为我的应用程序创建了一个同步适配器,它将同步我通过web请求与手机中的联系人获得的联系人。添加联系人没有问题,但是当联系人信息更改时,我无法正确更新联系人信息。例如联系人上的公司名称字段。以下是我尝试过的一些查询示例,没有工作或仅部分工作(即-一些联系人更新但不正确):

        ContentValues values = new ContentValues();
    values.put(ContactsContract.CommonDataKinds.Organization.COMPANY, "New Company");
context.getContentResolver().update(Uri.parse("content://com.android.contacts/data/"), values, BaseColumns._ID + "=?", new String[] { String.valueOf(id) } );

我也尝试过按照android文档的建议批量执行此操作:

    builder = ContentProviderOperation
            .newUpdate(ContactsContract.Data.CONTENT_URI);
    builder.withSelection(BaseColumns._ID + " =?", new String[]{String.valueOf(id)});
    builder.withValue(
            ContactsContract.CommonDataKinds.Organization.COMPANY,
            "New Company Name!");
    operationList.add(builder.build());

我已经阅读了ContactContracts文档,并最初遵循本教程。我还检查了api中的AuthenticatorActivity示例,但无济于事。如有任何帮助,不胜感激。

花了大量的时间试图找出正确的查询,我相信我已经找到了答案。看起来我需要将BaseColumns._ID更改为ContactsContract.Data.CONTACT_ID,并且对于我所做的每次更新,我还必须提供mime类型,我也没有在android文档中看到这一点。这篇文章提供了很多帮助:使用Android联系人

        String orgWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
    String[] orgWhereParams = new String[]{String.valueOf(id), 
        ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE}; 
    operationList
    .add(ContentProviderOperation
            .newUpdate(ContactsContract.Data.CONTENT_URI)
            .withSelection(orgWhere, orgWhereParams)
            .withValue(
                    ContactsContract.CommonDataKinds.Organization.DATA,
                    guCon.getCompany()).build());

最新更新