共享内容提供商

时间:2013-03-06 17:38:37

标签: android android-contentprovider

我的应用程序有两个版本,一个是免费版和专业版,而应用程序数据的内容提供程序需要在两者之间共享。

它的设计应牢记以下内容

  • 任何版本创建的数据应立即在其他版本中显示
  • 据我了解,专业版和免费版都无法声明same content provider in the manifest file
  • 记住最后一点,我需要为免费版和专业版创建单独的提供程序

可能的解决方案:

  • 创建两个内容提供商,一个由免费版本创建,另一个由专业版本
  • 创建
  • 首次推出专业版时,如果免费版中有任何数据,请将其复制到专业版
  • 无论何时以免费版或专业版编写任何数据,我都应检查内容提供商的其他版本是否存在,如果存在,则写入内容提供商
  • 将android:protectionLevel属性设置为“signature”,以便两个版本都可以访问两个内容提供商

如果这有意义,请告诉我,并遵循共享内容提供商的最佳做法。请分享任何其他方式。

3 个答案:

答案 0 :(得分:4)

我在市场上有3个应用程序,每个应用程序都有免费和付费版本。 对于给定的应用程序,我在Android共享库项目中有100%的代码,该项目从Free和Paid项目中引用。这些免费和付费的Android项目只是虚拟项目,仅对其AndroidManifest.xml有用。

如果您希望启用/禁用某些功能,您可以随时根据包名称在共享库中添加相关检查。

在您的代码中(在共享库中),您可以根据调用包区分Free或Paid以及启用/禁用功能。

if ("com.example.paid".equals(context.getPackageName()) {
    //enable pro version features
}

你能不能做类似的事吗?这将为您节省大量的维护费用。

答案 1 :(得分:4)

所以这就是我最终做的事情:

  • 为每个版本创建了两个单独的内容提供商(每个版本都有一个单独的权限)并将其声明为唯一
  • “android:exports”设置为“true”以启用跨应用程序共享内容提供商数据
  • 为每个内容提供商定义了自定义权限(具有读取/写入权限)以限制对数据的访问
  • 对于每个权限定义,我将“android:protectionLevel”属性定义为“签名”,以便我的应用程序可以隐式安全地相互通信< / LI>
  • 在任何给定版本中,然后使用uses-permission android:name =“MY_CUSTOM_PERMISSION element 中的内容提供商 >

结果:

  • 这两个版本现在都可以安全地和隐式地访问彼此的内容提供商
  • 当付费版本被启动时,它会将所有数据从免费版本静默复制到付费版本以准备无缝使用

答案 2 :(得分:1)

只是我的想法。

是否真的需要在设备中安装免费版和付费版?如果没有,您可以在用户首次启动付费版本时提供免费付费的复制功能。然后,用户可以删除免费版本并专门使用付费版本。

方法很好。但我发现它有一个问题。

内容提供商随时间变化会发生什么?假设您决定使用更多字段来增强内容提供程序。然后,用户应升级这两个版本,以便正确编写数据。

内容提供商会随着时间的推移保持不变吗?如果您决定付费版本将具有更多功能,从而捕获更多数据,该怎么办?