11

我正在开发一组需要共享通用状态和配置设置的复杂 Android 应用程序。

例如,看这张解释我的场景的图片:

在此处输入图像描述

我希望 APP 1、APP 2 和 APP 3 能够访问(读/写)数据到公共存储区域。此外,我需要卸载保护,即我不希望在用户卸载任何应用程序时删除数据。

我已经阅读了关于 SQLite 数据库、ContentProviders 以及内部和外部存储的写作,但上述每种方法都有如下所列的缺点:

  • SQLite 数据库:DB 在应用程序卸载时被删除,并且对每个应用程序都是私有的
  • ContentProvider:移除带有 ContentProvider 的应用时,数据被移除
  • 内部存储:对每个应用程序都是私有的,并且在应用程序卸载时会删除数据(http://developer.android.com/training/basics/data-storage/files.html#InternalVsExternalStorage
  • 外部存储:不可靠(用户可以移除 SD 卡)
  • 存储在服务器上:不可能,用户可能没有可靠的互联网连接

编辑:

我不希望对 Google Play 服务有任何依赖,因为我将通过 Play 商店分发应用程序并作为第 3 方下载。

请帮帮我。

4

4 回答 4

1

谷歌云端硬盘有点为你做这件事。您基本上获得了对由远程文件系统支持的本地文件系统的权限。在大多数手机上,这是预装的,因此您担心的卸载问题不是问题。

您可以为您的应用程序创建一个文件夹,然后您可以读取/写入。

https://developers.google.com/drive/android/

于 2014-09-12T16:24:22.583 回答
1

您可以使用共享首选项对象从文件中读取和写入首选项数据。最重要的是使用 MODE_MULTI_PROCESS。如果多个进程正在改变同一个 SharedPreferences 文件,则使用位 MODE_MULTI_PROCESS。

使用以下代码:

SharedPreferences shPrefernces = context.getSharedPreferences("filename", MODE_MULTI_PROCESS);
String s1 = shPrefernces.getString("keytosearch1", "");
String pass = shPrefernces.getString("keytosearch2", "");
于 2014-09-12T16:25:39.283 回答
0

我同意使用 world_readable 的共享首选项对您来说是不够的,或者无法通过 Internet 共享,但您仍然可以做一件事。

使用广播接收器和自定义广播。在具有共享偏好的所有应用程序中具有冗余公共数据。

谁更新数据将向系统发送广播。所有的应用程序都实现了广播接收器。每当收到新广播时,他们都会更新共享偏好中的数据。App A -> 数据更新时发送广播。

如果已经安装了 App B,则 App B 也会接收广播并保存来自该意图的数据。

如果 App B 更新新数据。APP B -> 为公共数据发送广播 其他应用程序将更新数据。

  • 删除所有应用后,只会丢失常用数据。如果至少安装了一个应用程序,数据仍然存在。
于 2016-09-08T12:04:33.340 回答
0

偏好数据将始终存储在每个应用程序自己的上下文中。使用 sharedUserId 并在所有应用程序中创建一个新的首选项文件。打开每个应用程序时,应用程序必须从所有其他应用程序上下文中检查首选项值,并应根据首选项中可用的最后更新时间值写入其首选项以查找最新更新的时间值。

每当打开任何应用程序时,最新数据都将存储在其本地。如果安装或卸载了任何应用程序,这应该可以正常工作。

于 2017-03-01T12:53:06.853 回答