【问题标题】:Android: Stopping Alarm at specific time and service clarificationAndroid:在特定时间停止警报和服务澄清
【发布时间】:2026-02-12 00:30:01
【问题描述】:

有什么方法可以在给定时间停止闹钟,例如,我在早上 7:45 开始闹钟,它每 5 分钟重复一次,然后我想在时间已经早上 8:00 时停止闹钟?

由于警报管理器的 cancel() 方法只接受一个动作 (PendingIntent),我该如何处理这个算法

其次,关于服务,我想在服务上放置一个检查器或 if 语句来检查它是否已经 8:00a,但我不确定服务是否总是在后台运行,如果是,这是否意味着说它总是检查时间,如果它是早上 8 点?考虑到服务的意义,一旦它开始,我就不会停止,除非明确告知要这样做。

你们中的任何人都知道如何做到这一点,请分享,我现在有点困惑

【问题讨论】:

  • 当有 Android 操作系统需要的资源时,可以终止服务。因此,您的服务可能在上午 8:00 之前被终止。

标签: android alarmmanager android-alarms


【解决方案1】:

您必须在闹钟第一次启动时启动服务,此服务将在 5 分钟响起闹钟并获取设备时间并将其与停止时间的时间进行比较 在那(意味着早上 8 点)停止您的服务

【讨论】:

  • 但服务可能会在任何给定时间被安卓操作系统停止。所以它有可能不会在@PoweRoy所说的确切时间停止警报
【解决方案2】:

你为什么不在早上 7:45 用AlarmManager#setRepeating 开始你需要做的任何事情,然后用AlarmManager#set 设置另一个闹钟来停止之前的闹钟?

AlarmManager#set 只会触发一次,所以你可以用它来取消重复的警报

编辑: 在AlarmManager#set的实现中,您将检索重复警报(AlarmManager#setRepeating)和cancel()

【讨论】:

  • 那不是多余的吗?将另一个警报添加到现有警报。有没有办法只取消闹钟?
  • 框架不会监控可能消耗资源的时间,而是会在您定义的时间触发 AlarmManager#set,并且只需一次。而且是两个单独的警报
  • 哦?重复报警可以恢复吗?你会怎么做?
  • 您必须传递用于为重复警报创建 pendingIntent 的确切值。这个有点棘手,但是有很多关于 SO 的帖子,代码为 sn-ps
最近更新 更多