4

像许多其他人一样,我将拥有我的应用程序的“精简版”和“专业版”版本。他们使用一个数据库,该数据库将在内部存储中。我希望用户能够购买专业版并安装它而不会丢失数据库。

部分解决方案: 我看过其他关于如何让多个应用程序使用同一个数据库的帖子。本质上,这需要两件事:

  1. 两个清单都在清单中声明了相同的 android:sharedUserId,
  2. 其中一个应用程序必须使用另一个应用程序的上下文打开数据库。

我试过了,是的,它有效!

问题:卸载精简版会删除数据库。按照这个:用户安装精简版。精简版创建数据库,他很乐意在其中创建和保存数据。后来他决定安装pro。专业版访问由 lite 创建的数据库,一切正常。最后,他卸载了lite,因为他不再需要它了。现在,pro 将停止工作,因为卸载 lite 版本时,db 已被 Android 删除。

什么解决方案? 想到的一种解决方案是让第三个应用程序拥有数据库。这是一个“什么都不做”的应用程序,它可以简单地安装并且与包具有相同的名称。它没有 UI,实际上永远不会运行。然后,可以在不影响数据库的情况下安装或卸载 lite 和 pro 应用程序。

这是一个好主意吗?有没有更好的方法(除了为数据库创建提供者)?如果这是一种合理的方法,我如何创建一个没有 UI 的应用程序不是服务?

4

2 回答 2

3

听起来您决定使用专业应用的应用内购买,但这也可能是一个可行的解决方案。

从您的帖子中,您有一个包含数据库的精简版应用程序。当用户购买 pro 应用程序时,您可以让 pro 应用程序访问 lite 数据库以进行读/写。如果这些假设是真的,为什么不做以下事情:

  1. 当 pro 应用程序启动时,让它创建一个数据库,因此 pro 应用程序现在有自己的数据库。

  2. 创建该数据库后,检查 lite 应用程序数据库是否存在,我假设您已经这样做了,因为您正在您的专业应用程序中打开 lite 应用程序数据库。

  3. 如果 lite app db 存在,将 lite app db 中的数据写入 pro app db。现在在您的 pro db 中,您将拥有所有 lite db 数据。在使用 pro 应用程序时,应用程序应该调用它自己的数据库,而不是 lite 数据库。现在,来自 lite 应用程序的数据已传输到 pro,用户可以卸载 lite 应用程序,而不必担心数据会丢失。

  4. 如果 lite db 不存在,则不会发生任何事情,并且 pro 应用程序会加载自己的数据库、空白数据(或您可能需要预加载的任何内容)。

于 2013-06-06T00:08:47.917 回答
1

为什么您的服务器中没有数据库,并且无论何时安装应用程序(无论是精简版还是专业版)只需从服务器中提取数据库(如果存在,则覆盖存在的数据库),这对您的数据库安全也有好处,因为我可以简单地使用 zip 软件浏览 apk 文件并获取您的数据库。另一个好处是apk文件的大小会更小,更重要的是它将解决您的问题

于 2012-12-27T03:51:58.490 回答