我正在尝试使用同步适配器将我的联系人与网络存储同步。当我在服务器端向该服务器询问任何联系人更新时,我会得到一个添加/更改的所有新信息的列表。要更新它们,我正在使用此处描述的首选方法
我的问题是,当我制作一个ContactOperations.newUpdate()
并用我从网络服务器获得的所有新/更改信息提供它,然后将其应用到ContactsContract.AUTHORITY
已经存储在手机上的所有信息被删除时?!?
我举个例子说明思路:
我的手机上保存了一个联系人,名为:John 'Dady' Doe。现在系统调用了 SyncAdapter,他向服务器询问任何联系人更改,服务器说,这个联系人的姓现在是“Jones”。有了这些信息,我构建了一个新的ContactProviderOperation.newUpdate()
并通过它提供.withValue()
并应用它。但 Android 真正做的是:它刷新所有其他列,现在我的联系人被命名为“Jones”(givenName 和 middleName 缺少 -.-)。
有什么办法可以阻止 Android 这样做吗?我可以传递任何参数CALLER_IS_SYNCADAPTER
吗?或者我是否需要制定自己的解决方法(希望不是),例如先读取数据记录,应用更新,然后将其应用到ContactsContract.AUTHORITY
?
任何提示都非常感谢!
/edit:我通过查看 SyncAdapterExample 进行了进一步研究,特别是在“更新联系人”部分,但我所看到的有点让我震惊:Google 实际上确实首先读取了联系人,然后从服务器应用更新并重新应用它到ContactsContract.AUTHORITY
. 但他们只处理名字和姓氏、一封电子邮件和两部电话(普通电话和移动电话)。在我的情况下,我不想处理所有联系信息,所以做这样的解决方法是不可行的,除非没有其他方法,我希望不会。希望有人能引导我朝着正确的方向前进。