2

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

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

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

  3. 每个带有这个库的应用程序都可以在第一时间启动“数据库”,以后安装的应用程序可以访问同一个“数据库”

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

有什么建议吗?

4

2 回答 2

1

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

好的。

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

为您的提供者提供适当的权限(签名)非常好。

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

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

对数据的底层结构进行编码取决于您。由于您已经假设提供程序将属于专用库包,因此可能的解决方案是:

  1. 在 package 中实现您的提供程序com.mysuite.library
  2. 在 Play 商店中发布此应用。
  3. 制作客户端应用程序 A、B 和 C。
  4. 在 Play 商店中发布它们。
  5. 每当找不到应用程序 A、B 或 C 时,要求您的用户下载此库包com.mysuite.library

但是,如果您不想提供中央包,我相信您将需要在您自己的每个应用程序中提供一个具有不同权限的提供程序(以避免 CONFLICTING_PROVIDER 错误)。在初始化每个客户端时,您首先检查您的命名空间中是否有另一个提供程序 (com.mysuite.provider*),假设您知道要在搜索时创建和/或在它们之间迭代的所有可能权限 (com.mysuite.provider*)。提供者 1、2 等)。

但是,此提议可能会导致自定义备份出现问题(例如,如果仅备份一个客户端),这将迫使重新创建数据。它当然有警告并且肯定更复杂(丑陋,恕我直言),但它可以工作。

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

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

于 2013-09-03T04:30:31.553 回答
0

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

  1. 您有一个 APK 来存储数据并使其可供其他应用程序使用。如果卸载此应用程序,数据将消失。
  2. 每个应用程序都维护自己的数据副本,但会将更改同步到其他应用程序。
  3. 数据存储在 SD 卡上。尽管有几个应用程序这样做,但这通常是一个糟糕的解决方案。
  4. 数据存储在服务器上,只有在设备有网络连接时才能访问。

一旦您选择了您希望您的数据驻留的位置,您就可以通过任意数量的机制来传输它。

ContentProvider如果您不将数据存储在 SD 卡或服务器上,这是一个不错的选择,但您希望能够使用content:URI 将数据传输到不知道它存在的应用程序。

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

于 2013-09-03T04:43:38.877 回答