Как я могу вызвать метод для другой деятельности? - PullRequest
0 голосов
/ 17 сентября 2018

Я работаю над приложением для Android, которое часто использует уведомления.

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

Я только узнал, как отменить уведомления на MainActivity, которые останавливают их только после закрытия и открытия приложения.

Какой предпочтительный способ сделать это?

из SettingActivity.kt:

class NotificationPreferenceFragment : PreferenceFragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        addPreferencesFromResource(R.xml.pref_notification)
        setHasOptionsMenu(false)

        var switchPref: Preference = findPreference(getString(R.string.pref_notifications_switch_key))

        switchPref.onPreferenceChangeListener = OnPreferenceChangeListener { preference, isChecked ->
            var toast: Toast = if (isChecked as Boolean) {
                Toast.makeText(activity, "switch is ON", Toast.LENGTH_SHORT)

            } else {
                Toast.makeText(activity, "notifications is OFF", Toast.LENGTH_SHORT)

            }
            toast.show()
            true
        }
    }

отменить метод из MainActivity:

fun cancelAlarm() {
    alarmMgr = applicationContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager
    val intent1 = Intent(applicationContext, AlarmReceiver::class.java)
    alarmIntent = PendingIntent.getBroadcast(applicationContext, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT)
    alarmMgr!!.cancel(alarmIntent)
}

1 Ответ

0 голосов
/ 17 сентября 2018

Как сказал комментатор, просто используйте BroadcastReceiver

NotificationPreferenceFragment.java

class NotificationPreferenceFragment : PreferenceFragment() {

    val broadcaster: LocalBroadcastManager? = null;

    override fun onCreate(savedInstanceState: Bundle?) {
        broadcaster = LocalBroadcastManager.getInstance(this);
    }

    // Inside your onPreferenceChangeListener, depends on when you want to call it, either ON or OFF
    Intent intent = new Intent("YOUR_DATA_STRING");
    intent.putExtra(ANY_EXTRAS_STRING, DATA_ITSELF);
    broadcaster.sendBroadcast(intent);
}

MainActivity.java

import android.support.v4.content.LocalBroadcastManager;




    override fun onStart() {
        super.onStart()
        LocalBroadcastManager.getInstance(this).registerReceiver(MYReceiver,
                IntentFilter("YOUR_DATA_STRING")
        )
    }

    private val MYReceiver = object : BroadcastReceiver() {
        fun onReceive(context: Context, intent: Intent) {
            if (intent.extras != null) {
                // get any extras if neccessary
                // intent.extras!!.getString("ANY_EXTRAS_STRING")
                cancelAlarm()
            }
        }
    }

    override fun onStop() {
        super.onStop()
        LocalBroadcastManager.getInstance(this).unregisterReceiver(MYReceiver)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...