我想使用AlarmService在特定时间触发通知。可以将其视为与日历应用程序类似的内容,该应用程序显示提醒作为即将发生的事件的通知。
安排意图的代码(通过警报服务)如下所示:
fun scheduleNotification(event : CalendarEvent)
val startTime : Instant = event.startTime
val intent = buildPendingIntent(event)
val notificationTime = startTime.minusMillis(TimeUnit.MINUTES.toMillis(10)) // 10 Minutes earlier
if (Build.VERSION.SDK_INT < 23) {
alarmService().setExact(AlarmManager.RTC_WAKEUP,
notificationTime.toEpochMilli(), intent)
} else {
alarmService().setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,
notificationTime.toEpochMilli(), intent)
}
}
fun buildPendingIntent(event : CalendarEvent){
val intent = Intent(context, NotificationReceiver::class.java)
intent.putExtra(EVENT_ID, event.id)
return PendingIntent.getBroadcast(context, 0, realIntent, 0)
}
class NotificationReceiver : WakefulBroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
// build and display the notification
}
}
因此,通知的10次中有1次是正确的,并且在正确的时间显示(通过NotificationReceiver)。所以我认为调度部分工作正常。
这引出了另一个问题:每当用户创建新的CalendarEvent
时,方法scheduleNotification(newEvent)
都会被调用。在我看来,AlarmService在内部更新现有的PendingIntents,这就是为什么10个中的1个(通常是第一个计划的PendingIntent)被触发的原因,而其他的则没有。
我可以为Android应用安排多少个闹钟?您是否发现了我的代码中的任何其他问题?