【问题标题】:Dealing with shared preferences stored in a library处理存储在库中的共享首选项
【发布时间】:2010-08-13 20:30:18
【问题描述】:

我的应用有免费版和付费版。我将所有免费版本代码放入一个库中,我从一个新的免费版本项目和付费版本项目中引用该库。

我注意到库和现在我的项目都有一个属性文件,我的首选项完全停止工作。似乎取决于代码在哪个命名空间中执行,当您查询 SharedPreferences 时,它会得到不同的结果。

解决这个问题的最佳方法是什么?到目前为止,这两个应用程序的偏好设置相同,但我稍后可能会扩展付费版本并添加免费版本中不存在的偏好设置。

【问题讨论】:

  • 哦,对不起。这就是没人回答的原因吗?我不知道我应该这样做。

标签: android sharedpreferences


【解决方案1】:

我假设您问的是您的库是否可以与顶级应用共享首选项,而不是免费版是否可以与完整版共享。

api 文档提到你不能在给定进程之外共享首选项,所以有可能因为你(可能)有两个不同的包(一个用于 lib,一个用于顶级),你得到的首选项在库中与顶级应用程序来自不同的文件?

您可以通过在 /data/data/your-package 中浏览手机存储空间来检查顶级应用程序和库的首选项文件。您可能会发现每个文件都有不同的首选项文件,我认为这意味着您无法在库/应用程序之间共享首选项。

您可以通过仅从顶级应用读取和写入首选项并创建一个界面来将这些首选项传递到库来绕过这些限制。如果您的库仅显示来自顶层的值,则库不必访问首选项,因此您的所有首选项访问都在一个地方完成。

此外,这将允许您对完整和免费有不同的偏好(无论如何这是默认行为,因为它们将存储在单独的偏好文件中),然后您可以将正确的信息发送到基于 lib关于版本。

【讨论】:

  • 你是对的,偏好设置有两个文件。一个在图书馆,一个在应用程序中。为了读/写库首选项,我在库中围绕从 PreferenceManager.getDefaultSharedPreferences 返回的 SharedPreferences 创建了一个包装类。要读取/写入特定于应用程序的任何首选项,我使用从非库类中的 PreferenceManager.getDefaultSharedPreferences 调用返回的 SharedPreferences。
  • Scienceprodigy,你能发布一些关于你是如何做到这一点的代码吗?
猜你喜欢
  • 1970-01-01
  • 2011-09-03
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-17
相关资源
最近更新 更多