Запуск службы через SwitchPreference - PullRequest
0 голосов
/ 12 февраля 2020

Может кто-нибудь сказать мне, как я могу запустить / остановить службу определения местоположения (или любую другую службу), когда SwitchPreference на PreferenceScreen включен / выключен? Я использую settingsFragemnt (расширяющий PreferenceFragemntCompat), который размещен в моей активности настроек.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

мой фрагмент выглядит так:

public class SettingsFragment extends PreferenceFragmentCompat {

@Override
public void onCreatePreferences(@Nullable Bundle savedInstanceState, String rootKey){
    setPreferencesFromResource(R.xml.prefs, rootKey);

    // setting summaries for both list preferences ---------------------------------------------
    ListPreference photo_quality = findPreference("photo_quality");
    if (photo_quality != null){
        photo_quality.setSummaryProvider(ListPreference.SimpleSummaryProvider.getInstance());
    }

    ListPreference uploads = findPreference("upload_options");
    if (uploads != null) {
        uploads.setSummaryProvider(ListPreference.SimpleSummaryProvider.getInstance());
    }

    // setting the visibility for location service ---------------------------------------------
    if (!Auth.getCanDeactiveGps()){
        Objects.requireNonNull(getPreferenceScreen()
                .findPreference("location_category")).setVisible(false);
    }

    // handling locationSwitchPreference change ------------------------------------------------
    SwitchPreference locationSwitch = findPreference("location");

    if (locationSwitch != null){
        locationSwitch.setChecked(Settings.getBoolean(Settings.DO_NOT_LOCATE,
                false));

        locationSwitch.setOnPreferenceChangeListener(
                new Preference.OnPreferenceChangeListener() {

            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                Settings.setBoolean(Settings.DO_NOT_LOCATE, true);
                return false;
            }
        });
    }
}
0 голосов
/ 12 февраля 2020

Вы должны добавить OnPreferenceChangeListener, который позволит вам прослушивать изменения переключателя:

   final SwitchPreference onOffRandomColor = (SwitchPreference) findPreference(this.getResources()
                                                    .getString(R.string.sp_key_on_off_random_color));

        onOffRandomColor.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object o) {
                if(onOffRandomColor.isChecked()){

                }else {

                }
                return false;
            }
        });

Следующим шагом является запуск службы:

startService(new Intent(this, LocationService.class));

...