Горячее использование Alarm.setRepeating в Kotlin - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь создать приложение, в котором я получаю уведомление, даже если мое приложение не запущено, поэтому я создал диспетчер аварийных сигналов в своей функции MainActivity. Проблема в том, что он срабатывает в одно и то же время, потому что я использую alarnManager.setExact(). Я попытался использовать alarmManager.setRepeating(), но он не дает точного интервала в 10 секунд. Это мой код:

MainActivity

fun setAlarm() {
        context = this
        alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
        val seconds = 10 * 1000
        val intent = Intent(context, Receiver::class.java)
        val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + seconds, seconds.toLong(), pendingIntent )
        Log.d("MainActivity", "Create: ${Date().toString()}")
    }

Это внутренний класс внутри моей MainActivity

 class Receiver : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
           Log.d("MainActivity", " Receiver: ${Date().toString()}")
        }
    }

Можете ли вы научить меня, как заставить будильник повторяться каждые х секунд? Я думал вызвать fun setAlarm() из MainActivity в override fun onReceive(), чтобы он обновился, но я не могу получить доступ к методу из class Receiver: BroadcastReceiver(). Спасибо!

...