1

CheckBoxPreference在 my中使用PreferenceActivity来设置一个值。稍后,我想从 Receiver 和/或 Service 检查该值。findPreference()方法在该上下文中不可用。我知道,SharedPreferences无论如何都会存储此偏好值,但关键是什么?我怎样才能得到复选框的值?

4

4 回答 4

6

我知道,这个偏好值无论如何都存储在 SharedPreferences 中,但关键是什么?

无论您android:key在偏好 XML 中有什么价值。

我怎样才能得到复选框的值?

调用PreferenceManager.getDefaultSharedPreferences()以获取SharedPreferences,然后getBoolean()使用您在 中使用的密钥调用android:key

于 2011-07-31T15:54:25.657 回答
2

在您的偏好 XML 中,您将拥有如下内容:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference android:enabled="true"
    android:title="@string/s_pref" android:key="@string/pref"
    android:defaultValue="@string/d_pref"></CheckBoxPreference>
</PreferenceScreen>

你的 strings.xml 会有这样的东西:

<string name="pref">my.package.PREF</string>
<string name="s_pref">Prompt</string>
<string name="d_pref">true</string>

您的 Activity 的 onCreate() 将具有以下内容:

prefs = PreferenceManager.getDefaultSharedPreferences(this);
pref = prefs.getBoolean(getString(R.string.pref), true));

如果您想在有人更改首选项时做某事,请将 onActivityResult() 添加到您的活动并使用 startActivityForResult() 启动首选项活动。当 onActivityResult() 被调用时,无论您想要指示偏好更改的任何结果代码,您都可以执行另一个 getDefaultSharedPreferences()。

共享首选项框架会自动保存数据...您不必自己主动处理它,但如果您愿意,可以在首选项活动中使用 OnPreferenceChangeListener

于 2011-07-31T19:50:10.317 回答
0

我要添加到 CommonsWare 的答案中的唯一一件事是,由于您提到了一项服务,您可以将服务需要了解的任何首选项放入其 Intent 附加内容中。例如:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
Intent intent = new Intent(this, MyService.class);
intent.putExtra("mypref", prefs.getString("mypref", ""));
startService(intent);
于 2011-07-31T17:27:29.883 回答
0

尝试在你的服务中写这个

 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplication());

并在此处指定您在 xml 中使用的密钥

 if(preferences.getBoolean(your key ,true))
            {

希望这有帮助。

于 2016-11-25T12:46:29.063 回答