1

我有一个自定义ContentProvider类,我最初在与使用它的应用程序相同的项目文件中开发它。然而,由于这个应用程序只是众多用户之一ContentProvider,我想将它拆分到不同的项目中。该代码正在 Android PDK 上开发,但未来的客户端可能会在 SDK 上开发(在自定义 SDK 或 SDK 插件等上)。

我面临的问题是关于ContentProvider类中的常量,例如 CONTENT_URI、列名以及一些用于解释从查询返回的值的常量。这些当然不能从另一个项目访问。在我看来,此时我有 3 个选项:

1) 忽略问题,直接在用户应用程序代码中输入值。然而,这使得访问变得ContentProvider更加丑陋。我将不得不更改一些列,用字符串而不是整数对一些列进行编码,以保持代码的可维护性。

2) 将常量放在一个单独的类中,并在使用ContentProvider. 不过,我不喜欢复制代码。在每个目标应用程序中保留此代码的副本,会使某些事情的维护变得更加烦人。

3) 滥用我在 PDK 上开发的事实,并公开一个平台库,如vendor/sample/frameworks/PlatformLibrary. 但是,平台库没有清单文件,如果我的理解正确,这意味着我不能包含ContentProvider. 这意味着我需要一个“正常”项目用于ContactProvider,而另一个单独的项目只是为了公开具有常量值的类。这感觉太不对劲了。

具有多个子表的 ContentProvider的类结构中的答案似乎暗示了选项 (1),这可能是目前最好的选择。

但是,也许我错过了另一种整洁的方式来做到这一点?请记住,我正在 PDK 上进行开发,我当然希望我ContentProvider能够以与 Google 供应商相同的方式使用。

4

1 回答 1

3

您可能已经至少有一个类/接口定义了ContentProvider使用列名、内容 URI 等的静态常量的“合同”。

如果您将其放入其自己的 Android SDK 库项目中(仅用于构建/类路径上的 Android 类),则您可以从您的实际 SDK/PDK 应用程序中使用此库,ContentProvider并将其作为myapp-api.jarJAR 分发给其他人使用。

这样您就可以两全其美:没有过时的代码(因为您ContentProvider依赖它),并且其他人可以为 URI 和列名使用漂亮的常量。

有关合约类的示例,请参阅ContactsContract

于 2011-08-25T08:31:22.180 回答