在多个Android应用程序之间共享和保存数据

时间:2014-09-12 16:03:04

标签: android sqlite android-contentprovider android-external-storage

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

例如,请参阅此图片解释我的方案:

enter image description here

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

我已经阅读过有关SQLite数据库,ContentProviders和内部和外部存储的文章,但上述每种方法都有以下缺点:

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

修改

我不想要依赖Google Play服务,因为我将通过Play商店和第三方下载分发这些应用。

请帮帮我。

4 个答案:

答案 0 :(得分:1)

Google云端硬盘有点适合您。您基本上可以获得由远程文件系统支持的本地文件系统的权限。在大多数手机上都会预先安装,因此您担心的卸载问题不是问题。

您可以为应用创建一个可以读/写的文件夹。

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

答案 1 :(得分: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", "");

答案 2 :(得分:0)

我同意使用world_readable的共享偏好设置不适合您,或者无法通过互联网共享,但您仍然可以做一件事。

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

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

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

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

  • 删除所有应用后,只会丢失常见数据。如果安装了至少一个应用程序,则数据仍然存在。

答案 3 :(得分:0)

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

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