当我不在活动中时如何向我的方法传递活动?

问题描述 投票:0回答:2

我有一个自定义类SettingsPreferences,在这里我为录音机应用程序处理一些设置的更改。目前,我正在尝试打开和关闭“请勿打扰”模式。

我创建了一个方法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中使用这些方法,因为无法从静态上下文中调用非静态方法。因此,我有下面的代码来调用自定义类中的方法。

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;
            }

        });

任何帮助或解释将不胜感激,因为我对此感到非常困惑。

谢谢。

java android android-activity preferences
2个回答
0
投票

您可以传递create Application类并将MyApplication.getInstance()传递给您的方法。

如果使用kotlin,则简单设置applicationContext

希望它会有所帮助。


0
投票

您不能在匿名内部类内部使用this。您将必须使用MainActivity.this

© www.soinside.com 2019 - 2024. All rights reserved.