Как получить значение CheckBoxPreference в Приемнике / Сервисе в Android? - PullRequest
1 голос
/ 31 июля 2011

Я использую CheckBoxPreference в моем PreferenceActivity, чтобы установить значение. Позже я хочу проверить это значение в Receiver и / или Service. findPreference() метод недоступен из этого контекста. Я знаю, что это значение предпочтения в любом случае хранится в SharedPreferences, но каков ключ? Как я могу получить значение флажка?

Ответы [ 4 ]

6 голосов
/ 31 июля 2011

Я знаю, что это значение предпочтения в любом случае хранится в SharedPreferences, но каков ключ?

Какое бы значение вы не указали для android:key в своем предпочтительном XML.

Как я могу получить значение флажка?

Позвоните PreferenceManager.getDefaultSharedPreferences(), чтобы получить SharedPreferences, затем наберите getBoolean() с ключом, который вы использовали в android:key.

2 голосов
/ 31 июля 2011

В ваших настройках 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>

Функция onCreate () вашей активности будет выглядеть примерно так:

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

Если вы хотите что-то делать, когда кто-то меняет настройки, добавьте onActivityResult () к своей деятельности и запустите операцию предпочтений с помощью startActivityForResult (). Когда onActivityResult () вызывается с любым кодом результата, который вы хотите указать на изменение настроек, вы можете сделать еще один getDefaultSharedPreferences ().

Платформа общих предпочтений автоматически сохраняет данные ... вам не нужно активно обрабатывать их самостоятельно, хотя вы можете, если хотите, с OnPreferenceChangeListener в действии предпочтений

0 голосов
/ 25 ноября 2016

попробуйте написать это в вашем сервисе

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

и здесь укажите ключ, который вы использовали в xml

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

надеюсь, что это поможет.

0 голосов
/ 31 июля 2011

Единственное, что я хотел бы добавить к ответу CommonsWare, так как вы упомянули службу, вы можете указать в настройках Intent любые предпочтения, о которых служба должна знать. Например:

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