如何检查是否设置了警报?

8

我正在尝试检查我的闹钟是否处于激活状态。在设置闹钟之前,alarmIsSet方法将返回false,在设置闹钟后返回true。到目前为止,一切都很好,然而,在取消闹钟后,alarmIsSet仍将继续返回true,直到我重新启动设备。

我该如何解决这个问题?

public class Alarm extends Activity {
    private Intent intent = new Intent("PROPOSE_A_TOAST");

    private void alarm (boolean activate) {
        AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0);

        if(activate == true) {
            int type = AlarmManager.ELAPSED_REALTIME_WAKEUP;
            long interval = 3000;
            long triggerTime = SystemClock.elapsedRealtime();       
            am.setRepeating(type, triggerTime, interval, pi);       
        } else {
            am.cancel(pi);
        }
    }

    private boolean alarmIsSet() {
        return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_NO_CREATE) != null;
    }
}
3个回答

14

你只需要添加

pi.cancel();

之后

am.cancel(pi);

1

在自己处理这些问题时,我发现如果在测试过程中创建了一个待处理意图,则该意图实际上不会在测试之间清除。即使杀死应用程序也无法清除它。该意图仍然留存在系统中,并在检查时保持返回 true。我实际上必须编写一些代码来杀死它,才能进行正确的测试。


0
最简单的方法是检查闹钟变量中(日期和)时间的值,如果它与未设置闹钟时的值不同(您可以在检查一次),则表示闹钟处于活动状态,并且在程序中进行检查的时间要么已经过去并且闹钟已经响起,要么是一个尚未到达的时间,闹钟尚未响起或关闭。请注意,规则可能只允许在设备会话之前每12或24小时重新启动或关闭电源之前激活一个闹钟,并且这可能是状态未清除的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接