Как я могу передать моему методу действие, когда оно не находится в действии? - PullRequest
0 голосов
/ 08 мая 2020

У меня есть собственный класс SettingsPreferences, в котором я занимаюсь изменением некоторых настроек моего приложения Voice Recorder. На данный момент пытаюсь справиться с включением и выключением режима "Не беспокоить".

Я создал метод requestAccessNotificationPermission, который вызывается другим методом, checkIfNotifGranted, который проверяет, предоставлен ли доступ к политике уведомлений.

@RequiresApi(api = Build.VERSION_CODES.M)
void checkIfNotifGranted() {
   if (!notificationManager.isNotificationPolicyAccessGranted()) {
       requestAccessNotificationPermission();
   }
}

@RequiresApi(api = Build.VERSION_CODES.M)
private void requestAccessNotificationPermission(Activity activity) {
    Intent intent = new Intent(Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
    activity.startActivity(intent);
}

Мой план состоит в том, чтобы, если это будет работать, я бы затем использовал два метода ниже для обработки выключения и включения режима "Не беспокоить".

 @RequiresApi(api = Build.VERSION_CODES.M)
void doNotDisturbOff() {
    notificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_NONE);
}

@RequiresApi(api = Build.VERSION_CODES.M)
void doNotDisturbOn() {
    notificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_ALL);
}

Однако я не знаю, как решить эту Activity проблему. Я попытался указать this в качестве аргумента для вызова requestAccessNotificationPermission, но это не сработало.

У меня не может быть этих методов в моем SettingsFragment, так как я не могу вызвать нестатический c метод из контекста stati c. Поэтому у меня есть приведенный ниже код для вызова методов в моем пользовательском классе.

final Preference dnd = findPreference("doNotDisturb");
assert  dnd != null;
dnd.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                String boolCheck = newValue.toString();
                if (boolCheck.equals("true")) {
                    new SettingsPreferences().checkIfNotifGranted();
                    new SettingsPreferences().doNotDisturbOn();
                }
                else if (boolCheck.equals("false")) {
                    new SettingsPreferences().checkIfNotifGranted();
                    new SettingsPreferences().doNotDisturbOff();
                }
                return false;
            }

        });

Любая помощь или объяснение были бы очень признательны, поскольку я действительно озадачен этим.

Спасибо ты.

Ответы [ 2 ]

3 голосов
/ 08 мая 2020

Вы не можете использовать this внутри анонимного внутреннего класса. Вам нужно будет использовать MainActivity.this

0 голосов
/ 08 мая 2020

Вы можете передать класс create Application и передать MyApplication.getInstance() своим методам.

Если вы используете kotlin, тогда простой набор applicationContext.

Надеюсь, это может помощь.

...