像许多其他人一样,我将拥有我的应用程序的“精简版”和“专业版”。他们使用一个数据库,该数据库将存储在内部存储中。我希望用户能够购买专业版并安装它而不会丢失数据库。
部分解决方案: 我看过其他关于如何让多个应用程序使用同一个数据库的帖子。本质上,这需要两件事:
- both manifests declare the same android:sharedUserId in the manifest,
- one of the apps must open the database using the other app's context.
我试过了,是的,它有效!
问题:卸载精简版会删除数据库。按照这个:用户安装精简版。精简版创建数据库,他愉快地在其中创建和保存数据。后来他决定安装专业版。专业版访问由精简版创建的数据库,一切正常。最后,他卸载了 lite,因为他不再需要它了。现在,pro 将停止工作,因为在卸载 lite 版本时,数据库已被 Android 删除。
什么解决方案?想到的一个解决方案是拥有拥有数据库的第三方应用程序。这是一个“什么都不做”的应用程序,安装简单并且与包同名。它没有 UI,实际上永远不会运行。然后,可以在不影响数据库的情况下安装或卸载精简版和专业版应用程序。
这是个好主意吗?有没有更好的方法(除了为数据库创建提供程序)?如果这是一种合理的方法,我该如何创建不属于服务的没有 UI 的应用程序?
最佳答案
听起来您决定采用专业应用的应用内购买,但这可能也是一个可行的解决方案。
从您的帖子中,您有一个包含数据库的精简版应用程序。当用户购买专业版应用程序时,您可以让专业版应用程序访问精简版数据库以进行读/写。如果这些假设是正确的,为什么不执行以下操作:
当专业应用启动时,让它创建一个数据库,这样专业应用现在就有了自己的数据库。
创建该数据库后,检查精简版应用程序数据库是否存在,我假设您已经这样做了,因为您正在您的专业版应用程序中打开精简版应用程序数据库。
如果 lite app db 存在,将 lite app db 中的数据写入 pro app db。现在在您的专业数据库中,您将拥有所有精简版数据库数据。在使用专业应用程序时,应用程序应该继续调用自己的数据库,而不是精简版数据库。现在lite app的数据已经转移到pro,用户可以卸载lite app而不用担心数据会丢失。
如果精简版数据库不存在,则什么也不会发生,专业版应用会加载自己的数据库、空白数据(或您可能需要预加载的任何内容)。
关于android - 使用无操作应用程序托管数据库,以便精简版和专业版可以访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14049095/