我已经创建了一个演示项目,你可以看看它:
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
)
然后,即使应用关闭,您也可以看到 Toast。
编辑
您可以使用context.registerReceiver(receiver, IntentFilter("something")) 注册您的BroadcastReceiver
然后添加到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(this, 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
从 Android 5.1 开始,值将被强制增加到 60000;不要依赖这个来准确