【问题标题】:Android - SharedPreferences across profilesAndroid - 跨个人资料的 SharedPreferences
【发布时间】:2013-09-14 23:25:12
【问题描述】:

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

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

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

【问题讨论】:

  • 你有没有得到这个工作?我也有同样的问题
  • 我最终在外部存储上写入了一个文件。我用facebook隐藏来加密它。像魅力一样工作,不是完美的解决方案,但它是安全的。想看我用的代码,可以找here

标签: android sharedpreferences user-profile


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可能想了解在this doc, under the Effects section 中将多个用户添加到设备时的规则。很明显,您要完成的工作将是“创造性的解决方法”,或者根本不可能。

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        一种解决方案是为内容提供者提供自定义permissions,并定义用于保存和恢复来自该内容提供者的首选项的协议。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-04-06
          • 1970-01-01
          • 2014-06-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-20
          相关资源
          最近更新 更多