当我的方法不在 activity 中时,我该如何将它传递给 activity?
How can I pass my method an activity when it is not in an activity?
我有一个自定义 class 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
中使用这些方法,因为我不能从静态上下文中调用非静态方法。因此,我有下面的代码来调用我的自定义 class.
中的方法
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;
}
});
任何帮助或解释将不胜感激,因为我真的被这个难住了。
谢谢。
您可以通过创建 Application
class 并将 MyApplication.getInstance()
传递给您的方法。
如果您使用的是 kotlin,那么简单设置 applicationContext
。
希望对您有所帮助。
您不能在匿名内部 class 中使用 this
。您将不得不使用 MainActivity.this
我有一个自定义 class 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
中使用这些方法,因为我不能从静态上下文中调用非静态方法。因此,我有下面的代码来调用我的自定义 class.
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;
}
});
任何帮助或解释将不胜感激,因为我真的被这个难住了。
谢谢。
您可以通过创建 Application
class 并将 MyApplication.getInstance()
传递给您的方法。
如果您使用的是 kotlin,那么简单设置 applicationContext
。
希望对您有所帮助。
您不能在匿名内部 class 中使用 this
。您将不得不使用 MainActivity.this