共享内容提供商

Soh*_*ham 9 android android-contentprovider

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

它的设计应牢记以下几点

  • 任何版本创建的数据应立即在其他版本中可见
  • 据我所知,专业版和免费版都无法在清单文件中声明相同的内容提供者
  • 记住最后一点,我需要为免费版和专业版创建单独的提供程序

可能的解决方案:

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

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

Soh*_*ham 5

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

  • 为每个版本创建了两个单独的内容提供程序(每个都有单独的权限)并唯一地声明了它们
  • 将其“android:exported”设置为“true”以启用跨应用程序共享内容提供商数据
  • 为每个内容提供者定义自定义权限(具有读+写访问权限)以限制对数据的访问
  • 对于每个权限定义,我将“android:protectionLevel”属性定义为“signature”,以便我的应用程序可以隐式且安全地相互通信
  • 在任何给定版本中,我然后明确要求使用使用权限 android:name="MY_CUSTOM_PERMISSION 元素访问其他版本中的内容提供程序

结果:

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