Как отменить AlarmManager в Android

У меня есть будильник, который не сработает до определенного часа и минуты. Однако, как только это время придет, он будет отключаться каждый раз, когда я снова запускаю приложение. (Когда приложение запускается, оно сбрасывается и проверяется наличие нового будильника).

Например, он сработает в 9:48. До 9:48 ничего не происходит, как ожидалось. Но ПОСЛЕ 9:48 он будет продолжать срабатывать при каждом запуске приложения (будильник — это простое уведомление в строке состояния).

Вот код - где я ошибся?

// Здесь установлен будильник — этот код вызывается каждый раз при запуске приложения

public void setAlarm() {
 for (int i : AlarmDays) {

        Calendar cal = Calendar.getInstance();
        if (cal.get(Calendar.DAY_OF_MONTH) > i)
            cal.add(Calendar.MONTH, 1);
        cal.set(Calendar.DAY_OF_MONTH, i);
        cal.set(Calendar.HOUR, 9);
        cal.set(Calendar.MINUTE, 53);
        cal.set(Calendar.SECOND, 1);


        String Name = AlarmNames.get(count);
        count = 0 + 1;

        Intent intent = new Intent(ManageDebts.this, TimeAlarm.class);
        Bundle b = new Bundle();
        b.putString("keyvalue", Name);
        intent.putExtras(b);


        pendingIntent = PendingIntent.getBroadcast(this, i,
                intent, PendingIntent.FLAG_CANCEL_CURRENT);
        am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
                pendingIntent);

    }
 }

TimeAlarm.класс

public class TimeAlarm extends BroadcastReceiver {

NotificationManager nm;

@Override
public void onReceive(Context context, Intent intent) {

    String DebtName = intent.getStringExtra("keyvalue");

    nm = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);
    CharSequence from = "Payment Due: " + DebtName;
    CharSequence message = "Update your Balance Now";
    Intent notificationIntent = new Intent(context, ManageDebts.class);
    notificationIntent.getExtras();
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
            notificationIntent, 0);
    Notification notif = new Notification(R.drawable.icon, "Pay "
            + DebtName + " today!", System.currentTimeMillis());
    notif.setLatestEventInfo(context, from, message, contentIntent);
    notif.defaults = Notification.DEFAULT_SOUND
            | Notification.DEFAULT_LIGHTS;
    notif.flags = Notification.FLAG_SHOW_LIGHTS;
    notif.ledOnMS = 100;
    notif.ledOffMS = 100;
    notif.flags |= Notification.FLAG_AUTO_CANCEL;
    nm.notify(1, notif);
}

}


person TheLettuceMaster    schedule 15.06.2012    source источник
comment
Убедитесь, что вы не устанавливаете будильники в прошлом (например, 9:48 на сегодня, когда время после 9:48).   -  person CommonsWare    schedule 15.06.2012
comment
Похоже, именно этим я и занимаюсь. Где я могу настроить игнорирование любых будильников, которые НЕ поступают в эту минуту, час и секунду? до или после?   -  person TheLettuceMaster    schedule 15.06.2012


Ответы (1)


Где я могу настроить игнорирование любых будильников, которые НЕ поступают в эту минуту, час и секунду? до или после?

В вашем методе setAlarm(). Либо отфильтруйте вещи из AlarmDays, прежде чем войти в цикл, либо сравните cal.getTimeInMillis() с System.currentTimeMillis(), чтобы увидеть, было ли это в прошлом, или что-то в этом роде.

person CommonsWare    schedule 15.06.2012
comment
Спасибо. Я пошел со сравнением, если заявление. Работал отлично. - person TheLettuceMaster; 16.06.2012