简体   繁体   中英

How can I pass my method an activity when it is not in an activity?

I have a custom class SettingsPreferences where I handle the changing of a few settings for my Voice Recorder app. At the moment, I am trying to handle turning on and off Do Not Disturb mode.

I've created a method requestAccessNotificationPermission that is called by another method, checkIfNotifGranted , that checks if Notification Policy Access is granted.

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

My plan is that if this would work, I would then use the two methods below to handle the turning off and on of do not disturb mode.

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

However, I do not know how to deal with this Activity problem. I tried to put this as an argument for the call to requestAccessNotificationPermission but it does not work.

I can't have these methods in my SettingsFragment as I can not call a non static method from a static context. Therefore, I have the code below to call the methods in my custom 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;
            }

        });

Any help or explanation would be greatly appreciated as I'm really stumped with this one.

Thank you.

You can't use this from inside an anonymous inner class. You will have to use MainActivity.this

You can pass create Application class and pass the MyApplication.getInstance() to your methos.

If you are using kotlin then simple set applicationContext .

Hope it may help.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM