Я создал демонстрационный проект, чтобы вы могли на него взглянуть:
https://github.com/joancolmenerodev/BroadcastReceiverAndAlarmManagerInKotlin
Сначала вы должны создать BroadcastReceiver
, а затем, используя AlarmManager
, вы можете выбрать интервал времени, в который вы хотите позвонить.
Создать BroadcastReceiver
вы можете сделать это следующим образом:
val broadCastReceiver = object : BroadcastReceiver() {
override fun onReceive(contxt: Context?, intent: Intent?) {
toast("This toast will be shown every X minutes")
}
}
А затем у вас есть этот метод, чтобы начать работу:
val mIntent = Intent(context, broadCastReceiver)
val mPendingIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, mIntent, 0)
val mAlarmManager = context
.getSystemService(Context.ALARM_SERVICE) as AlarmManager
mAlarmManager.setRepeating(
AlarmManager.ELAPSED_REALTIME_WAKEUP, System.currentTimeMillis(),
CHANGETOYOURDESIREDSECONDS, mPendingIntent
)
И тогда вы сможете увидеть тост, даже если приложение закрыто.
Редактировать
Вы можете зарегистрировать BroadcastReceiver
, используя context.registerReceiver(receiver, IntentFilter("something"))
и затем добавление к mIntent
и действия для «чего-то».
Если вам не нравится этот способ, вы можете создать новый класс с именем MyReceiver
, который расширяет BradcastReceiver
следующим образом:
class MyReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Toast.makeText(context,"This toast will be shown every X minutes", Toast.LENGTH_SHORT).show()
}
}
А затем включите сигнализацию следующим образом:
val mIntent = Intent (это MyReceiver :: class.java)
val mPendingIntent = PendingIntent.getBroadcast(this, 0, mIntent, PendingIntent.FLAG_UPDATE_CURRENT)
val mAlarmManager = this
.getSystemService(Context.ALARM_SERVICE) as AlarmManager
mAlarmManager.setRepeating(
AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),
WHATEVERYOUWANT, mPendingIntent
)
Примечание. По умолчанию установлено значение 60000
.
Значение будет увеличено до 60000 с Android 5.1; не полагайтесь на это, чтобы быть точным