有没有办法在Android上的用户个人资料中访问SharedPreferences
?
例如,如果UserA对应用程序首选项进行了更改,我希望该更改也可供UserB使用。我曾尝试使用写入getFilesFir()
路径的文本文件并从其他帐户读取该文件,但是当userA写入文件时,userB无法使用该文件。我使用MODE_PRIVATE
编写文件,因为MODE_WORLD_READABLE
和MODE_WORLD_WRITABLE
已被弃用,但我不确定使用这些文件会有所帮助。
是否有人知道是否有办法集中我的应用程序设置的首选项,以便可以在所有用户之间共享?我想避免在SD卡上写任何东西。
答案 0 :(得分:0)
你不能。只有SD卡不会强制执行用户权限。
答案 1 :(得分:0)
在this doc, under the Effects section中将多个用户添加到设备时,您可能希望熟悉正在使用的规则。很明显,你想要完成的将是一个“创造性的解决方法”,或者根本不可能。
那么应用程序存在哪些Android工具来共享非文件系统的数据?嗯,通常的机制是ContentProvider,但我怀疑应用程序的两个沙盒实例无法访问彼此的ContentProviders(此外,您如何区分它们?)。
我们假设用户实例应用程序根本无法相互访问。也许他们可以共享一些所有应用程序都可以访问的系统级设施,无论谁是活跃用户?在我写这篇文章时,我唯一想到的就是DropBoxManager。不幸的是,它不是可靠的持久性,因为它可以存储的数量有限,并且这些限制可能导致您的数据在被其他应用程序实例读取之前的任何时候被推出队列。此外,那里的数据基本上是公开的,可能不是你想要的。
如果你想变得疯狂,只要两个应用都知道如何找到秘密特殊记录,你就可以重新访问ContentProviders并以某种方式利用日历或联系人的系统级提供程序来存储数据。狂野的东西。
另一种解决方案可能是将所有数据存储在某个服务器上,并让每个用户输入一些密钥,以便能够在服务器上定位和读取/写入您的数据blob。如果不是手动密钥,请尝试使用some "unique" device property作为密钥。这可能是最好的解决方案,因为您可以更好地保证某些内容不会意外删除或公开您的数据。
答案 2 :(得分: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();
答案 3 :(得分:0)
解决方案是为内容提供商提供自定义permissions,并定义用于保存和恢复此内容提供商的首选项的协议。