【问题标题】:Stop AlarmManager when app is accidentally closed当应用程序意外关闭时停止 AlarmManager
【发布时间】:2013-12-01 08:57:22
【问题描述】:

我有一个关于 AlarmManager 以及当应用程序意外关闭时如何停止它的问题。

我的 AlarmManager 每 30 分钟重复一次它的警报。现在,当用户不小心关闭应用程序时,警报仍然有效。这还不错,因为在一段时间内它打算这样做,但是一旦用户想要停止重复警报,它就不再工作了(AlarmManager 的一个功能)。因此,用户必须重新启动 Android。

有没有其他方法可以在应用关闭时停止 AlarmManager?

也许有人给我一个例子?

非常感谢!

最好的问候, 伯恩德

【问题讨论】:

    标签: android alarmmanager


    【解决方案1】:

    您必须自己取消闹钟。只需调用alarmManager.cancel(pi),其中pi 是您之前创建的待定意图,用于安排警报。

    如果您不再需要挂起的 Intent,您也可以通过调用 pi.cancel() 来取消它。

    另一种可能性是在您的警报广播接收器上添加一个检查,以在您不再需要它们的某些情况下忽略预定的警报。这样做的缺点是会消耗更多电池,因为手机会唤醒以触发警报。

    【讨论】:

    • 感谢您的提示。我知道我必须自己取消它,但我想要实现的是,如果用户不小心关闭了应用程序,警报管理器仍在工作。当用户现在重新启动应用程序时,他或她应该按下将关闭正在运行的警报管理器的按钮。但是,一旦关闭应用程序,这是不可能的。所以,我认为可能有另一种方法可以实现我的目标。我知道用 pi.cancel 停止警报管理器,但这只有在用户之前没有关闭应用程序的情况下才有可能!
    • 用户怎么会不小心关闭你的应用呢?报警管理器是Android系统提供的一项服务。您无法启动或停止它。您只能安排/重新安排或取消闹钟。
    • 当用户从 RAM 中删除应用程序时,应用程序可能会被用户意外关闭(强制关闭)——这就是我所说的意外关闭应用程序的意思。我的应用程序有一个用于启动警报管理器的按钮和一个用于停止警报的按钮。但有时会发生用户从 ram 中删除应用程序的情况,因此尽管应用程序已完全关闭,但警报管理器仍在工作,当用户重新启动应用程序时,他无法触发按钮取消,因为已经启动的警报管理器不再对此作出反应。
    • 在这种情况下,我认为您唯一的选择是在 SharedPreferences 上保存一个标志,以指示您的应用程序是否正确关闭。如果不是,该标志将在您下次启动应用程序时设置,然后您可以防止警报在您的广播接收器上触发。
    • 检查这个:stackoverflow.com/a/17008774/362298 如果用户强制关闭它,您将无法在您的应用程序上获得任何事件。所以你必须像我之前说的那样以其他方式处理这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多