AlarmManager срабатывает немедленно

Я использую этот код, и мой AlarmManager срабатывает немедленно, так как время, прошедшее до срабатывания, еще есть время для срабатывания. Я печатаю его в журнале, чтобы вы могли видеть.

public void SetAlarm(Context context, Date date, List<String> temp) {

    Log.d("Alarm Set", "Entered");
    Log.d("Alarm Set", date.getHours() + " " + date.getMinutes());

    AlarmManager am = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);

    Intent i = new Intent(context, Alarm.class);
    i.putStringArrayListExtra("list", (ArrayList<String>) temp);

    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i,
            PendingIntent.FLAG_ONE_SHOT);
    date.setMinutes(date.getMinutes() - 5);

    Calendar rightNow = Calendar.getInstance();
    long offset = rightNow.get(Calendar.ZONE_OFFSET)
            + rightNow.get(Calendar.DST_OFFSET);
    long sinceMidnight = (rightNow.getTimeInMillis() + offset)
            % (24 * 60 * 60 * 1000);

    long time_in_milis = (1000 * 60 * ((date.getHours() * 60) + date
            .getMinutes())) - sinceMidnight;
    Log.d("Alarm Time in Mili Seconds", "" + time_in_milis);

    am.set(AlarmManager.RTC_WAKEUP, time_in_milis * 10000, pi);
}

person user2617434    schedule 20.09.2013    source источник
comment
Я действительно не вижу вашей проблемы   -  person Robin Dijkhof    schedule 20.09.2013
comment
И в вашем журнале написано...?   -  person Snild Dolkow    schedule 06.11.2015


Ответы (1)


Если я правильно читаю ваш код, вы вычисляете time_in_milis [так в оригинале] как разницу во времени, желаемое время по отношению к «прямо сейчас». Однако set() ожидает абсолютную метку времени.

Другими словами, вы предоставляете довольно низкую временную метку, эффективно планируя свой будильник в прошлом.

Для простого тестового сценария попробуйте передать System.currentTimeMillis() + 60000 — ваш будильник должен сработать примерно через минуту (помните, что set() устанавливает неточные будильники).

person Snild Dolkow    schedule 05.11.2015