【问题标题】:How to get CheckBoxPreference value within the Receiver/Service in Android?如何在 Android 的 Receiver/Service 中获取 CheckBoxPreference 值?
【发布时间】:2011-07-31 15:08:03
【问题描述】:

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

【问题讨论】:

    标签: java android service receiver checkboxpreference


    【解决方案1】:

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

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

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

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

    【讨论】:

    • @jacek:你总是可以买一三本书... :-)
    【解决方案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

    【讨论】:

      【解决方案3】:

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

      SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
      Intent intent = new Intent(this, MyService.class);
      intent.putExtra("mypref", prefs.getString("mypref", ""));
      startService(intent);
      

      【讨论】:

      【解决方案4】:

      尝试在你的服务中写这个

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

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

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

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-16
        • 1970-01-01
        相关资源
        最近更新 更多