1

想象一下,如果你愿意的话:应用程序 A、B、C 和 D。它们都需要在它们之间共享一些少量数据,但不能保证它们中的任何一个都会被安装。也就是说,您可能只有 B 和 D。或仅 A 和 C 等。

在这种情况下可以使用 SharedPreferences 吗?

我知道我可以使用 createPackageContext 让 AD 全部使用 A 的包空间,如果 A 就像一个始终安装的主应用程序,但如果我不知道将安装其中的哪一个怎么办?如果在不存在的包空间上使用 createPackageContext,则返回 NameNotFoundException。

在这种情况下,除了 SD 卡上的文件之外,我还有其他内容提供商选项吗?

4

3 回答 3

2

如果它只是一个小数据,您可以在所有四个上创建共享首选项,并在阅读其共享首选项之前检查是否安装了应用程序。如何检查应用程序是否安装?在应用程序之间共享首选项

于 2012-11-02T13:41:57.350 回答
1

在这种情况下可以使用 SharedPreferences 吗?

不。

您不能将 SharedPreferences 写入任意位置。您能做的最好的事情就是拥有一个始终安装的中央应用程序(如“加载程序”或“主菜单”)。然后所有其他应用程序可以使用中央应用程序的首选项空间来存储和共享设置(通过 createPackageContext)。但是 createPackageContext 不适用于实际未安装的包(例如,“com.mystuff.centralstorage”必须是实际安装的包,而不是任意名称)

在这种情况下,最好的解决方案可能是 SD 卡上的 Java 风格的共享文件。请参阅:FileInputStream、FileOutputStream、DataInputStream 和 DataOutputStream,用于处理小型、简单的文本文件,可能存储首选项。此外,用于 SD 卡根路径的 Environment.getExternalStorageDirectory.getAbsolutePath(事实上,这是处理文件所需的唯一 Android 代码——其余的可以是 Java)。

Android ContentProviders 似乎更适合单个应用程序。允许进行一些共享(如上所述,使用 SharedPerferences),但它们似乎接受了 Android“沙盒”概念,每个应用程序都生活在自己的私人世界中,并在它们之间共享,这不是这里想要的。此解决方案需要任何数量的应用程序都可以全局访问,SD 卡上的常规旧文件将是。

(多进程友好的文件保护方案是另一件需要考虑的事情。)

于 2012-11-05T17:06:29.613 回答
0

要在应用程序之间共享信息,您可以实现一个 ContentProvider(或多个)。或者您使用 SDCard 上的通用文件。编辑:似乎 SharedPreferences 可以在应用程序之间共享。见上面的答案。

于 2012-11-02T13:30:44.090 回答