无论如何我可以做这样的事情吗
所有数据 I/O 函数都写在一个库包中
数据只能在具有此库的应用程序之间共享(可选)
每个带有这个库的应用程序都可以在第一时间启动“数据库”,以后安装的应用程序可以访问同一个“数据库”
我认为 ContentProvider 对我来说是一个完美的解决方案,但似乎条件 3 是不可能的。
有什么建议吗?
无论如何我可以做这样的事情吗
所有数据 I/O 函数都写在一个库包中
数据只能在具有此库的应用程序之间共享(可选)
每个带有这个库的应用程序都可以在第一时间启动“数据库”,以后安装的应用程序可以访问同一个“数据库”
我认为 ContentProvider 对我来说是一个完美的解决方案,但似乎条件 3 是不可能的。
有什么建议吗?
所有数据 I/O 函数都写在一个库包中
好的。
数据只能在具有此库的应用程序之间共享(可选)
为您的提供者提供适当的权限(签名)非常好。
每个带有这个库的应用程序都可以在第一时间启动“数据库”,以后安装的应用程序可以访问同一个“数据库”
我认为 ContentProvider 对我来说是一个完美的解决方案,但似乎条件 3 是不可能的。
对数据的底层结构进行编码取决于您。由于您已经假设提供程序将属于专用库包,因此可能的解决方案是:
com.mysuite.library
。com.mysuite.library
。但是,如果您不想提供中央包,我相信您将需要在您自己的每个应用程序中提供一个具有不同权限的提供程序(以避免 CONFLICTING_PROVIDER 错误)。在初始化每个客户端时,您首先检查您的命名空间中是否有另一个提供程序 (com.mysuite.provider*),假设您知道要在搜索时创建和/或在它们之间迭代的所有可能权限 (com.mysuite.provider*)。提供者 1、2 等)。
但是,此提议可能会导致自定义备份出现问题(例如,如果仅备份一个客户端),这将迫使重新创建数据。它当然有警告并且肯定更复杂(丑陋,恕我直言),但它可以工作。
就个人而言,我会坚持使用选项 1(库包)。在下载应用程序所需的库包时,我没有看到用户抱怨。
这只是一个架构决定,真的。
维护共享数据的方法只有四种:
一旦您选择了您希望您的数据驻留的位置,您就可以通过任意数量的机制来传输它。
ContentProvider
如果您不将数据存储在 SD 卡或服务器上,这是一个不错的选择,但您希望能够使用content:
URI 将数据传输到不知道它存在的应用程序。
如果您不需要与特定应用程序套件之外的任何人共享任何此类数据,并且您的数据不是作为数据库构建的,那么您可能更喜欢更简单的传输方式。