Android - 跨用户配置文件的SharedPreferences

7
有没有一种方法可以跨Android用户配置文件访问Shared Preferences?
例如,如果UserA更改应用程序的首选项,则希望UserB也可用该更改。我尝试使用写入到getFilesDir()路径的文本文件并从不同的帐户读取该文件,但是当UserA编写文件时,它对UserB不可用。我使用MODE_PRIVATE编写文件,因为MODE_WORLD_READABLE和MODE_WORLD_WRITABLE已被弃用,但我不确定使用这些是否起作用。
是否有人知道是否有一种方法来集中管理应用程序设置的首选项,以便可以在所有用户之间共享? 我想避免将任何内容写入SD卡。

你最终解决了这个问题吗?我也遇到了同样的问题。 - Tim
1
我最后把一个文件写入外部存储器。我使用了Facebook的Conceal加密它。效果很好,虽然不是完美解决方案,但可以保证安全性。如果你想看看我使用的代码,你可以在这里找到它。 - Ali
4个回答

0

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

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();

0

当多个用户添加到此文档的Effects部分中的设备时,您可能需要了解适用的规则。显然,您试图实现的将是“创造性的变通方法”,或者根本不可能。

那么,Android提供了哪些应用程序共享数据的机制,而不是文件系统呢? 好吧,通常的机制是ContentProvider,但我怀疑两个沙盒化的应用程序实例无法访问彼此的ContentProviders(而且,您如何区分它们?)。

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

如果你想疯狂一点,你可以重新审视ContentProviders,并以某种方式利用系统级别的日历或联系人提供者来存储数据,只要两个应用程序知道如何定位秘密特殊记录。真是疯狂的事情。

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


0
一个解决方案是提供一个带有自定义权限的内容提供者,并定义一个协议,从这个内容提供者保存和恢复偏好设置。

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接