如何检查是否设置了警报

时间:2011-01-17 13:21:14

标签: android alarm alarmmanager

我正在尝试检查我的闹钟是否有效。警报设置前,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 个答案:

答案 0 :(得分:14)

你只需要添加

pi.cancel();

am.cancel(pi);

答案 1 :(得分:1)

在我自己对这些东西感到头疼之后,我发现如果我在测试内容时以某种方式创建了一个待定意图,那么它实际上并没有在测试之间被清除。甚至杀死应用程序也没有这样做。意图仍留在系统中,并在检查时保持返回true。在测试之前,我实际上必须写一些代码来杀死它。

答案 2 :(得分:0)

最简单的方法是检查警报变量中(日期和时间)的值,如果它与未设置警报时的值不同(为了检查那是什么)那么它会指示警报处于活动状态,并且在检查程序时,它是已经过去的时间,警报已响起,或者是尚未到达的时间且警报尚未响起或熄灭。请注意,规则可能允许在重新启动或关闭电源之前或每12或24小时仅为每个设备会话激活一个警报,这可能是状态未被清除的原因。