AlarmManager setRepeating() 在不正确的时间触发
AlarmManager setRepeating() fires at incorrect time
我试图让 AlarmManager 在早上 8 点启动,但问题是当我 运行 这个应用程序在 21:00(或任何其他时间)启动我的 NotificationService class 显示当前时间的通知,而不是定义的早上。
val alarmManager:AlarmManager? = getSystemService(Context.ALARM_SERVICE) as AlarmManager
val firingCal:Calendar = Calendar.getInstance().apply {
set(Calendar.HOUR_OF_DAY,8)
set(Calendar.MINUTE,0)
set(Calendar.SECOND,0)
}
val serviceIntent: Intent = Intent(this,NotificationService::class.java)
val mPendingIntent = PendingIntent.getService(this,123, serviceIntent, PendingIntent.FLAG_UPDATE_CURRENT)
alarmManager?.setRepeating(AlarmManager.RTC, firingCal.timeInMillis, AlarmManager.INTERVAL_DAY, mPendingIntent);
问题是这样的
val firingCal:Calendar = Calendar.getInstance().apply {
set(Calendar.HOUR_OF_DAY,8)
set(Calendar.MINUTE,0)
set(Calendar.SECOND,0)
}
您正在将时间设置为 8:00,但如果现在已经过了上午 8:00,则现在设置为过去,因此闹钟会立即触发。
您必须检查时间是否已过 8:00 并将您的日期加 1:
val firingCal:Calendar = Calendar.getInstance().apply {
if (get(Calendar.HOUR_OF_DAY) >= 8) {
add(Calendar.DAY_OF_MONTH, 1)
}
set(Calendar.HOUR_OF_DAY,8)
set(Calendar.MINUTE,0)
set(Calendar.SECOND,0)
}
我试图让 AlarmManager 在早上 8 点启动,但问题是当我 运行 这个应用程序在 21:00(或任何其他时间)启动我的 NotificationService class 显示当前时间的通知,而不是定义的早上。
val alarmManager:AlarmManager? = getSystemService(Context.ALARM_SERVICE) as AlarmManager
val firingCal:Calendar = Calendar.getInstance().apply {
set(Calendar.HOUR_OF_DAY,8)
set(Calendar.MINUTE,0)
set(Calendar.SECOND,0)
}
val serviceIntent: Intent = Intent(this,NotificationService::class.java)
val mPendingIntent = PendingIntent.getService(this,123, serviceIntent, PendingIntent.FLAG_UPDATE_CURRENT)
alarmManager?.setRepeating(AlarmManager.RTC, firingCal.timeInMillis, AlarmManager.INTERVAL_DAY, mPendingIntent);
问题是这样的
val firingCal:Calendar = Calendar.getInstance().apply {
set(Calendar.HOUR_OF_DAY,8)
set(Calendar.MINUTE,0)
set(Calendar.SECOND,0)
}
您正在将时间设置为 8:00,但如果现在已经过了上午 8:00,则现在设置为过去,因此闹钟会立即触发。
您必须检查时间是否已过 8:00 并将您的日期加 1:
val firingCal:Calendar = Calendar.getInstance().apply {
if (get(Calendar.HOUR_OF_DAY) >= 8) {
add(Calendar.DAY_OF_MONTH, 1)
}
set(Calendar.HOUR_OF_DAY,8)
set(Calendar.MINUTE,0)
set(Calendar.SECOND,0)
}