我正在尝试开发一个将使用外部创建的 SQLite 数据库的 Android 应用程序。所需的应用程序运行周期如下:
- 数据库会定期(每天)在外部(Windows 桌面)机器上重新创建并填充数据(来自另一个数据库)。
- 然后将该数据库通过 USB 或 WIFI 推送到 Android 设备中。
- 新推送的数据库用于在 Android 设备上输入新数据。输入的记录被标记(以将它们与现有记录区分开来)。
- 最终,数据库从 Android 设备拉回 Windows 桌面计算机(此过程需要由 Windows 应用程序启动,而不是由 Android 应用程序启动)。
- 新的(标记的)记录从 Windows 桌面上的 SQLite 数据库中提取、验证并添加到主 Windows 桌面数据库中。
- 然后将更新后的完整桌面数据库复制到新的 SQLite 数据库中,最后将其推回 Android 设备(参见第 1 点和第 2 点)。
笔记:
- 项目清单
- Android 应用程序无法在 Android 设备上创建 SQLite 数据库。
- 将外部创建和填充的数据库放在 apk 的 assets 目录中是不可行的,因为这仅适用于初始应用程序安装,并且无法满足日常数据库推/拉例程的关键要求。
- 从 Web 服务器存储/导入 SQLite 数据库是不可行的,因为用户在使用此应用程序时通常无法访问互联网,即 SQLite 数据库推/拉过程需要在连接到独立的 Android 上完成Windows 机器通过 USB 或 WIFI。
- 首选是从 Android 内部存储区域(或 SDCard)存储和访问数据库,但在隐藏/受保护的内部根存储部分之外,即不在 /data/data/package_name/databases/ 中,以便为用户提供可以免费访问存储在 Android 设备上的数据库文件。
- 关键障碍似乎是 Android 应用程序对外部创建、推送的数据库的识别。我通过将应用程序创建的数据库文件复制到不同的文件夹(仍在 data/package_name/.. root 部分中)然后将其复制回 ../databases/ 文件夹来测试它。这足以扰乱应用程序对数据库的访问:尽管尝试打开相同的未更改的数据库文件,但我会收到“打开跟踪文件时出错:没有这样的文件或目录 (2)”。我想,这个限制是由于 Android 的“沙盒”文件安全保护?
如何克服上述数据库复制/推/拉问题以及如何实现这个所需的数据库访问推/拉模型?