【问题标题】:To detect existing alarm检测现有警报
【发布时间】:2015-10-07 13:59:17
【问题描述】:

我用这个函数创建闹钟,如果已经创建了闹钟,则取消闹钟,如果没有,则创建闹钟

但它不起作用,alarmUp 永远不会是假的

如何判断报警是否存在?

public void alarm(int hour, int minutes)
{
        Intent intent = new Intent(getApplicationContext(),AlarmActivity.class);
        PendingIntent sender = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);

        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR, 24);
        calendar.set(Calendar.HOUR_OF_DAY, hour);
        calendar.set(Calendar.MINUTE, minutes);
        calendar.set(Calendar.SECOND, 0);
        boolean alarmUp = (PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_NO_CREATE) != null);

        AlarmManager am = (AlarmManager) getApplicationContext().getSystemService(getApplicationContext().ALARM_SERVICE);
        if(!alarmUp)
        {
            am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
        }
        else
        {
            am.cancel(sender);
        }
}

【问题讨论】:

    标签: android android-intent alarmmanager android-pendingintent


    【解决方案1】:

    你有正确的想法,但顺序是错误的。你需要这样做:

    boolean alarmUp = (PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_NO_CREATE) != null);
    

    在你这样做之前:

    PendingIntent sender = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
    

    alarmUp 始终为 true 的原因是因为您之前刚刚自己创建了 PendingIntent

    【讨论】: