Я использую Preferences-API
для реализации настроек в моем приложении.
Я решил использовать PreferenceFragment
.
Мой PreferenceFragment
содержит мой код onSharedPreferenceChanged
.
Тем не менее, для одного из моих Preferences
я не уверен, каким путем можно достичь своей цели.
Цель: на основе TogglePreference либо включить, либо отключить мой приемник.
НижеЯ включил 2 различных способов, как я думал, чтобы сделать это.
Я рассуждаю в двух примерах: # 1 не использует findPreference(key)
и # 2 делает.
Так что язапрос обратной связи - какой путь правильный?
public static final String PREF_GPS_STATE_LISTENER = "pref_gpsStateListener";
private SharedPreferences.OnSharedPreferenceChangeListener prefChangeListener;
...
...
prefChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged
(SharedPreferences sharedPreferences, String key) {
if (key.equals(PREF_GPS_STATE_LISTENER)) {
final PackageManager pacMan =
getActivity().getApplicationContext().getPackageManager();
final ComponentName compLocationReceiver = new ComponentName
("com.studio2bdesigns.testapp021019", ".LocationReceiver");
final SharedPreferences getPrefs =
PreferenceManager.getDefaultSharedPreferences(getActivity());
if (getPrefs.getBoolean(PREF_GPS_STATE_LISTENER, true)) {
// ENABLE THE RECEIVER
pacMan.setComponentEnabledSetting(compLocationReceiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
} else if (!getPrefs.getBoolean(PREF_GPS_STATE_LISTENER, true)) {
// DISABLE THE RECEIVER
pacMan.setComponentEnabledSetting(compLocationReceiver,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}
}
}
(ИЛИ) это правильный способ сделать это:
private SharedPreferences.OnSharedPreferenceChangeListener prefChangeListener;
...
...
prefChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged
(SharedPreferences sharedPreferences, String key) {
if (key.equals(PREF_GPS_STATE_LISTENER)) {
Preference gpsStateListenerPref = findPreference(key);
final PackageManager pacMan =
getActivity().getApplicationContext().getPackageManager();
final ComponentName compLocationReceiver = new ComponentName
("com.studio2bdesigns.testapp021019", ".LocationReceiver");
if (gpsStateListenerPref.isEnabled()) {
// ENABLE THE RECEIVER
pacMan.setComponentEnabledSetting(compLocationReceiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
} else if (!gpsStateListenerPref.isEnabled()) {
// DISABLE THE RECEIVER
pacMan.setComponentEnabledSetting(compLocationReceiver,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}
}
}
Сначала я подумал, что Option # 1 правильный, но причина, по которой я выбрал Option # 2 , заключается в том, что первый пример не't use findPreference(key);
- в этом вся суть key
, переданного в onSharedPreferenceChanged
, не так ли?
Мы очень ценим обратную связь!Спасибо!