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