android - 共享内容提供者

标签 android android-contentprovider

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

设计时应牢记以下几点

  • 任何版本创建的数据都应该立即在另一个版本中可见
  • 据我所知,专业版和免费版都不能声明 same content provider in the manifest file
  • 牢记最后一点,我需要为免费版和专业版创建单独的提供程序

可能的解决方案:

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

请告诉我这是否合理并遵循共享内容提供商的最佳实践。请分享任何其他执行此操作的方法。

最佳答案

所以这就是我最后做的:

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

结果:

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

关于android - 共享内容提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15254211/

相关文章:

android - CursorLoader 不显示数据库条目

android - 如何从外部更改适配器的元素?

android - 通话或短信电话位置

Android 将 subview 添加到没有空间的线性布局?

android - 以编程方式设置Android设备的锁屏壁纸

android - 在 Android 的 ContentProvider 中不实现 getType(Uri uri) 的副作用是什么?

android - Activity 类型中的方法 runOnUiThread(Runnable) 不适用于参数 (void)

android - 无法从其他应用程序访问 customProvider。它说它缺少它已经拥有的权限

android - 如何在任何 Android 手机中查找和收集给定联系人中的所有可用信息?

android - 如何处理搜索建议点击项目