【问题标题】:Where is a content provider stored in an Android project?内容提供者存储在 Android 项目中的什么位置?
【发布时间】:2011-01-13 18:29:52
【问题描述】:

这可能是一个简单的问题,但我很难确定一个直接的答案。

我在一个使用 Eclipse Android ADT 的项目中创建了一个内容提供程序,它位于它自己的单独包中。这个包包含在整个项目的 src 中。修改 AndroidManifest.xml 时,我将其作为 <application> 的子项包含在内:

 <provider android:name="JobProvider"
      android:authorities="dsndata.sds2Mobile.provider.JobProvider" />

将使用提供程序的代码位于一个单独的包中,也在 src 中

存储提供程序的最佳位置是哪里?在与源相同的包中使用它?另外,android:name 和 android:authorities 的正确值是什么?我确信它们会根据提供程序的存储位置而有所不同。

【问题讨论】:

  • 不知道具体的答案,但我认为将内容提供程序代码作为一个单独的项目管理可能会更好,尤其是当它的更改频率低于主项目时。我有很多测试数据,所以我希望我的主项目的 apk 很小并且不包含它。

标签: android android-contentprovider


【解决方案1】:

您可以将提供程序放置在您喜欢的任何位置。如果您正在编写一个为您的应用程序存储数据的提供程序(并且仅用于您的应用程序,并且只有您的应用程序使用它),那么将应用程序代码直接放入其自己的包中是最干净的。通常,'provider' 是包名。

至于名称和权限,见Manifest documentation

android:name 类名 实现内容提供者, ContentProvider 的子类。这 应该是一个完全限定的类名 (如, “com.example.project.TransportationProvider”)。 但是,作为简写,如果第一个 名称的字符是句号,它 附加到包名 元素中指定。 没有默认值。名字必须是 指定。

android:authorities 一个或一个列表 更多 URI 权威机构识别 内容权限范围内的数据 提供者。多个权威机构 通过将其名称与 一个分号。为了避免冲突, 权威名称应使用 Java 风格的命名约定(例如 com.example.provider.cartoonprovider)。 通常,它是 内容提供者子类。没有 默认。必须至少有一个权威 指定。

内容授权是一个唯一的字符串,用于将 content:// uris(uri 到数据)映射到您的类。 ContentResolver 使用该映射来确定如何将使用 URI 标识的给定请求提供给正确的类(您的)。因此需要一个唯一的字符串。

【讨论】:

  • 谢谢。这就是我的工作,但很高兴得到确认。 :P
【解决方案2】:

您可以将您的提供者存储在应用程序中的任何位置。这取决于您在 ContentProvider 类中提供的 URI 名称。请始终记住,在您的应用程序中使用的 URI 名称必须具有唯一的权限和路径。

Android:name 是您的 Content Provider 类名及其包名 并且 Android:authorities 是您的 URI 内容名称,您的 Provider 可用。 欲了解更多信息,您 http://marakana.com/s/post/1375/android_content_provider_tutorial

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多