nin*_*nse 4 android sync contacts contactscontract android-contacts
我最近为我的应用创建了一个同步适配器,它将通过网络请求与手机中的联系人同步我获得的联系人.添加联系人没有问题,但是当联系信息发生变化时,我无法正确更新联系信息.例如联系人上的公司名称字段.以下是我尝试过的一些示例查询,这些查询无法正常工作或仅部分工作(即 - 某些联系人已更新但未正确):
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) } );
Run Code Online (Sandbox Code Playgroud)
我也尝试按照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());
Run Code Online (Sandbox Code Playgroud)
我已阅读ContactContracts文档,最初是在阅读本教程.我也检查AuthenticatorActivity
了api中的示例无济于事.任何帮助是极大的赞赏.
在花费了大量时间试图找出正确的查询之后,我相信我找到了答案.它看起来像我需要改变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());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3413 次 |
最近记录: |