为啥我的闹钟管理器没有在指定时间关闭?

Posted

技术标签:

【中文标题】为啥我的闹钟管理器没有在指定时间关闭?【英文标题】:Why is my alarmmanager not going off at specified time?为什么我的闹钟管理器没有在指定时间关闭? 【发布时间】:2022-01-19 05:05:02 【问题描述】:

每次按下按钮时都会调用 setAlarm。每次我这样做时,无论如何都会在 5 秒后出现“测试”消息。更改 .setExact() 的第二个参数似乎不会影响闹钟何时响起。

在MainActivity中设置Alarm方法

private fun setAlarm (cal : Calendar)
        val alarmManager :AlarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
        val intent = Intent (this, AlertReceiver().javaClass)
        val pendingIntent : PendingIntent = PendingIntent.getBroadcast(this, 1, intent, 0)
        //
        alarmManager.setExact(AlarmManager.RTC_WAKEUP, 100000, pendingIntent)

AlertReceiver

class AlertReceiver: BroadcastReceiver() 
    override fun onReceive(context: Context?, intent: Intent?) 
        Toast.makeText(context, "test", Toast.LENGTH_SHORT).show()
    

【问题讨论】:

看看the docs for that method。第二个参数需要是触发警报的时钟时间,而不是在那之前经过的时间间隔。 哦,是的,我的错。我确实查看了该方法的文档,但我真的只是浏览了一下,并没有了解那部分。感谢您指出这一点。 【参考方案1】:

你应该试试这个

private fun setAlarm (cal : Calendar)
        val calendar = Calendar.getInstance()
            calendar.apply 
                    set(Calendar.HOUR_OF_DAY, 6)
                    set(Calendar.MINUTE, 30)
                    set(Calendar.SECOND, 0)
                
                val alarmManager :AlarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
                val intent = Intent (this, AlertReceiver().javaClass)
                val pendingIntent : PendingIntent = PendingIntent.getBroadcast(this, 1, intent, 0)
                //
            
         alarmManager.set(  AlarmManager.RTC_WAKEUP,
                    calendar.timeInMillis,
                    pendingIntent)
        

【讨论】:

以上是关于为啥我的闹钟管理器没有在指定时间关闭?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 MySQLdb 连接上下文管理器不关闭游标?

为啥 Grails 使用 Ivy 作为构建和依赖管理器? [关闭]

尝试更改 SQL Server IP 设置。配置管理器告诉我“指定的文件是只读的”[关闭]

我的电脑为啥没有realtek高清晰音频管理器

Android 6.0 处于打盹模式时如何让闹钟管理器工作?

为啥 Windows 任务管理器在写入非常大的文件时显示内存增加?我应该担心吗? [关闭]