AlarmManager未触发Intent

时间:2017-08-31 14:12:46

标签: android android-intent alarmmanager android-notifications

我想使用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应用安排多少个闹钟?您是否发现了我的代码中的任何其他问题?

0 个答案:

没有答案