【发布时间】:2011-08-25 16:31:22
【问题描述】:
我有一个自定义的ContentProvider 类,我最初在与使用它的应用程序相同的项目文件中开发了它。然而,由于这个应用程序只是ContentProvider 的众多用户之一,我想将它拆分到不同的项目中。代码正在 Android PDK 上开发,但未来的客户端可能会在 SDK 上开发(在自定义 SDK 或 SDK 插件等上)。
我面临的问题是关于 ContentProvider 类中的常量,例如CONTENT_URI、列名以及一些用于解释查询返回值的常量。这些当然不能从另一个项目访问。在我看来,此时我有 3 个选项:
1) 忽略问题,直接在用户应用程序代码中输入值。然而,这使得访问ContentProvider 更加丑陋。我将不得不更改一些列,用字符串而不是整数对一些列进行编码,以保持代码的可维护性。
2) 将常量放在单独的类中,并在使用ContentProvider 的应用程序中包含完整副本。不过,我不喜欢复制代码。在每个目标应用程序中保留此代码的副本,会使某些事情的维护变得更加烦人。
3) 滥用我在 PDK 上开发的事实,并公开平台库,如 vendor/sample/frameworks/PlatformLibrary 中所述。但是,平台库没有清单文件,如果我的理解正确,这意味着我不能包含ContentProvider。这意味着我需要一个用于ContactProvider 的“正常”项目,以及一个单独的项目,用于公开具有常量值的类。这感觉太不对劲了。
Class structure for a ContentProvider having multiple sub tables 的答案似乎暗示了选项 (1),这可能是目前最好的选项。
但是,也许我错过了另一种整洁的方法?请记住,我正在使用 PDK 进行开发,我当然希望我的 ContentProvider 能够以与 Google 供应商相同的方式使用。
【问题讨论】:
标签: android android-contentprovider