7

有没有办法SharedPreferences在 Android 上跨用户配置文件进行访问?

例如,如果 UserA 对应用程序首选项进行了更改,我希望 UserB 也可以使用该更改。我尝试使用写入getFilesFir()路径的文本文件并从不同的帐户读取该文件,但是当用户 A 写入文件时,用户 B 无法使用该文件。MODE_PRIVATE我用since编写文件MODE_WORLD_READABLEMODE_WORLD_WRITABLE已弃用,但我不确定使用这些文件是否有助于开始。

有谁知道是否有一种方法可以集中我的应用程序设置的首选项,以便可以在所有用户之间共享?我想避免将任何内容写入 SD 卡。

4

4 回答 4

0

将 getSharedPreferences() 与 MODE_PRIVATE 一起使用就足够了。您唯一需要的是使用应用程序上下文。这样,无论当前用户如何,您的所有活动都可以使用您的共享偏好。

String PREFS_NAME = "com.your_application";
Context context = getApplicationContext();

阅读偏好示例:

SharedPreferences reader;
reader = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
reader.getInt("name1", 3);

编写偏好示例:

SharedPreferences.Editor writer;
writer = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE).edit();
writer.putString("name2", "string").apply();
于 2016-02-19T09:24:01.150 回答
0

在本文档的“效果”部分下,您可能希望了解在将多个用户添加到设备时所使用的规则。很明显,您要完成的工作将是“创造性的解决方法”,或者根本不可能。

那么,有哪些 Android 工具可以让应用程序共享非文件系统的数据呢?好吧,通常的机制是ContentProvider,但我怀疑一个应用程序的两个沙盒实例无法访问彼此的 ContentProviders(此外,您如何区分它们?)。

让我们假设用户实例应用程序根本无法相互访问。也许他们可以共享一些所有应用程序都可以随时访问的系统级设施,而不管谁是活跃用户?在我写这篇文章时,我唯一想到的是DropBoxManager。不幸的是,它不能可靠地持久化,因为它可以存储的数量是有限的,并且这些限制可能会导致您的数据在其他应用程序实例读取之前随时被推出队列。此外,那里的数据基本上是公开的,这可能不是您想要的。

如果您想发疯,您可以重新访问 ContentProviders,并以某种方式利用日历或联系人的系统级提供程序来存储数据,只要两个应用程序都知道如何定位秘密特殊记录。野生的东西。

另一种解决方案可能是将您的所有数据存储在某个服务器上,并让每个用户输入一些密钥以便能够在服务器上定位和读取/写入您的数据块。如果不是手动键,请尝试使用一些“唯一”设备属性作为键。这可能是最好的解决方案,因为您有更多的保证不会意外删除或暴露您的数据。

于 2016-02-19T06:41:34.700 回答
0

你不能。只有 SD 卡不强制执行用户权限。

于 2016-02-13T15:45:25.573 回答
0

一种解决方案是为内容提供者提供自定义权限,并定义用于保存和恢复来自该内容提供者的偏好的协议。

于 2016-02-19T14:04:55.117 回答