如何检查是不是设置了闹钟

Posted

技术标签:

【中文标题】如何检查是不是设置了闹钟【英文标题】:How to check if alarm is set如何检查是否设置了闹钟 【发布时间】:2011-01-17 13:21:13 【问题描述】:

我正在尝试检查我的闹钟是否处于活动状态。 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;
    

【问题讨论】:

【参考方案1】:

你只需要添加

pi.cancel();

之后

am.cancel(pi);

【讨论】:

【参考方案2】:

在我自己对这些东西有些头疼之后,我发现如果我在测试东西时以某种方式创建了一个挂起的意图,它实际上并没有在测试之间被清除。即使杀死应用程序也没有这样做。 Intent 仍然保留在系统中,并在检查时一直返回 true。实际上,我必须编写一些代码来杀死它,然后才能正确测试。

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于如何检查是不是设置了闹钟的主要内容,如果未能解决你的问题,请参考以下文章

PHP光闹钟我如何检查我的时间是否等于设定的时间?

使用闹钟音量设置的Android闹钟声音?

想用winform制作一个闹钟,实现将自己下载音乐作为闹钟铃声

如何在iphone中设置选定日期的闹钟?

如何使用闹钟类设置闹钟

android 设置系统闹钟和系统日历提醒