【发布时间】:2014-03-31 20:51:07
【问题描述】:
据我了解,在 SyncService 中定义的一个 SyncAdapter 仅限于接收一个 ContentProvider 权限来处理。
但是,与此同时,它可以访问 ContentResolver,它还允许在其他 ContentProvider 上运行查询。如果需要开发人员向 SyncAdapter 提供单一的内容权限,并且她可以在她有权访问的任何 ContentProvider 上做任何她想做的事情,我不理解这个特定的设计概念。我的问题是:忽略 onPerformSync 的参数:字符串权限和 ContentProviderClient 提供程序并使用纯 ContentResolver 会有什么后果?
我的应用程序(实际上是它的 SyncService)的想法很简单:查询日历服务器(在我的例子中是 OwnCloud)不仅可以获取事件(与 com.android.calendar 同步),还可以获取 VTODOS,它然后分布在各种任务管理应用程序之间,我可以获得源代码和/或 ContentProviderContract。我还想到了自己的“Hub”ContentProvider,它具有基本的 VTODO/Task 结构,与服务器相比是唯一的。它应该能够与任务管理应用程序的不同内容提供商进行双向同步,然后与服务器同步。
我已阅读using ContentProviderClient vs ContentResolver to access content provider,我想我理解其中的区别。我现在很困惑,为什么 android SDK 强烈建议在单个 SyncAdapter 中使用单个 ContentProvider,而您却可以使用 ContentResolver 来绕过该限制。
我花了一整天的时间来解决这个问题,并搜索了数百个关于这个问题的 SO/Google 资源(其中一些资源多次)。我还看到了有关使用一个 SyncAdapter 同步多个 ContentProvider 的问题,但没有一个答案接近建议使用 ContentResolver。
【问题讨论】:
标签: android android-contentprovider android-contentresolver android-syncadapter