为什么 AlarmManager 中的 setRepeating() 没有在准确的时间显示警报通知

问题描述 投票:0回答:1
            val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager

            Log.e("TAG", "$hour : ${minute+1}: ", )
            val intent:Intent = Intent(this,MyReceiver::class.java)

          
            intent.putExtra("ALARM_TITLE","DRINK")
            intent.putExtra("ALARM_TIME","$hour : ${minute+1}")

            val calendar: Calendar = Calendar.getInstance()
            calendar.timeInMillis = System.currentTimeMillis()
            calendar.set(Calendar.HOUR_OF_DAY,hour)
            calendar.set(Calendar.MINUTE,minute+1)
            calendar.set(Calendar.SECOND,0)

            val pendingIntent:PendingIntent = PendingIntent.getBroadcast(
                this,
                0,
                intent,
                PendingIntent.FLAG_MUTABLE
            )

            alarmManager.setRepeating(
                AlarmManager.RTC_WAKEUP,
                calendar.timeInMillis,
                AlarmManager.INTERVAL_DAY,
                pendingIntent,
            )

当我使用setExact()时,我在指定的确切时间收到了通知。然而,当我切换到 setRepeating() 时,通知延迟了 10 分钟,例如,当我将闹钟设置为晚上 10:01 时,通知在晚上 10:11 到达。

请注意,我要求每天重复闹钟作为提醒。

android alarmmanager android-alarms
1个回答
0
投票

来自 setRepeating()

文档

注意:从 API 19 开始,所有重复警报都是不准确的。如果您的应用程序需要精确的交付时间,那么它必须使用一次性精确警报,并如上所述重新安排每次时间。 targetSdkVersion 早于 API 19 的旧应用程序将继续将所有警报(包括重复警报)视为准确警报。

简而言之,自 Android KitKat 以来,您无法设置精确的重复闹钟。调用

setRepeating()
与调用
setInexactRepeating()
具有相同的效果。

但是,您还有其他选择。正如文档中所建议的,您可以设置一个一次性的精确警报,当您希望它第一次响起时,当它触发时,您可以使用相同的时间值再次设置它。

© www.soinside.com 2019 - 2024. All rights reserved.