在具有相同库的应用之间共享数据

时间:2013-09-03 04:03:29

标签: android sqlite android-contentprovider

无论如何,我可以做这样的事情

  1. 所有数据I / O函数都写在库包中

  2. 数据只能在具有此库的应用程序之间共享(可选)

  3. 使用此库的每个应用都可以在第一时间启动“数据库”,之后安装的应用可以访问相同的“数据库”

  4. 我认为ContentProvider对我来说是一个完美的解决方案,但似乎条件3是不可能的。

    任何建议PLZ?

2 个答案:

答案 0 :(得分:1)

  

所有数据I / O函数都写在库包中

行。

  

数据只能在具有此库的应用程序之间共享(可选)

对您的提供商(signature)的适当权限非常好。

  

每个使用此库的应用程序都可以在第一时间启动“数据库”,以后安装的应用程序可以访问相同的“数据库”

     

我认为ContentProvider对我来说是一个完美的解决方案,但似乎条件3是不可能的。

由您来编码数据的基础结构。由于您已经假定提供程序属于专用库包,因此可能的解决方案是:

  1. 在包com.mysuite.library中实施您的提供商。
  2. 在Play商店中发布此应用。
  3. 制作客户端应用A,B和C.
  4. 在Play商店中发布它们。
  5. 只要应用程序A,B或C找不到com.mysuite.library,就要求您的用户下载此库包。
  6. 但是,如果您不想提供中央软件包,我相信您需要在每个自己的应用程序中为提供者提供服务,具有不同的权限(以避免CONFLICTING_PROVIDER错误)。在初始化每个客户端时,首先检查命名空间中是否有另一个提供者(com.mysuite.provider *),假设您在搜索时知道要创建的所有可能的权限和/或在它们之间进行迭代(com.mysuite。 provider1,2等。)。

    但是,这个提议可能会产生自定义备份问题(例如,如果只备份其中一个客户端),这将迫使重新创建数据。它肯定有警告,肯定更复杂(丑陋,恕我直言),但可以使其工作。

    就个人而言,我坚持使用选项1(库包)。在下载应用程序所需的库包时,我没有看到用户抱怨。

    这只是一个架构决定,真的。

答案 1 :(得分:0)

维护共享数据的方法只有四种:

  1. 您只有一个存储数据的APK,并可供其他应用使用。如果卸载此应用程序,则数据将消失。
  2. 每个应用都维护自己的数据副本,但会将更改同步到其他应用。
  3. 数据存储在SD卡上。这通常是一个糟糕的解决方案,但有几个应用程序可以做到这一点。
  4. 数据存储在服务器上,只有在设备具有网络连接时才能访问。
  5. 一旦您选择了您希望数据驻留的位置,您就可以通过任意数量的机制进行传输。

    如果您不将数据存储在SD卡或服务器上,

    ContentProvider是一个不错的选择,但您希望能够使用{{1将数据传输到不知道它存在的应用程序} URI。

    如果您不需要与特定应用程序套件之外的任何人共享任何此类数据,并且您的数据不是数据库结构,那么您可能更喜欢更简单的传输。