【问题标题】:host database with do-nothing app so lite and pro can access带有无操作应用程序的主机数据库,因此精简版和专业版可以访问
【发布时间】:2012-12-27 03:43:21
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 不是一个真正的答案,但您可以拥有一个应用并使用应用内购买进行升级。
  • 我了解到免费应用可以使用应用内购买系统解锁“pro”版本。这不是我的首选解决方案,因为它绕过了一些用户保护,例如能够获得自动退款。但是,这是阻力最小的道路,所以我要走。
  • 如果用户同时卸载 pro 和 lite 版本并且留下数据,他们可能(并且应该)感到恼火。所以我想知道在卸载 pro 和 lite 时是否有某种方法可以让第三个静音应用程序卸载。

标签: android database packages


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 如果我关注你,你的意思就是:复制数据库。也许同样的事情可以通过改变文件所有权来完成?我还没有准备好制作专业应用程序,所以这个想法会搁置一段时间。我会尽量记住在未来将我的结果发回这里。
  • 不确定是否要更改文件所有权,但复制 db 或从 lite 到 pro 读取/写入数据会起作用。
【解决方案2】:

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

【讨论】:

  • 这假设数据库没有用户在设备上生成的内容。
  • 是的,但是如果有生成的数据,这不是完美的答案..但也可以考虑将这些内容上传到服务器(定期)
  • 我没有关注你,或者你可能错过了我的观点之一。首先,我的数据库不在应用程序中——它是由应用程序拥有和创建的。这是一个 sqlite 数据库。那么,您是否建议编写一个拥有数据库的服务? “从您的服务器中提取数据库......”是什么意思?
  • 我以为你有一个现成的数据库供你的应用程序使用(例如字典应用程序数据库已经提前准备好),在这种情况下你可以从一个网址下载数据库,例如把它带有共享链接的 drobbox,并通过链接 garp 数据库)。但由于它是由应用程序生成的,因此您需要另一种解决方案,例如找到一种将数据库存储在 SD 卡而不是内部存储器中的方法,请查看此 [one] (stackoverflow.com/questions/4433208/…)
  • 是的,我可以把它放在 SD 卡上。我试图避免这种情况,因为它使数据库如此脆弱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多