2013-10-04 7 views
0

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

private void scheduleAlarm(int day, int startHour, int startMinute, String info) { 

    AlarmManager mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    Calendar c = Calendar.getInstance(); 

    c.set(Calendar.DAY_OF_WEEK, day); 
    c.set(Calendar.HOUR, startHour); 
    c.set(Calendar.MINUTE, startMinute); 

    Intent startIntent = new Intent(this, Recorder.class); 
    startIntent.putExtra("info", "someinfo"); 

    Log.v("millis", String.valueOf(c.getTimeInMillis())); // time is okay 
    Random mRandom = new Random(); 
    int randomInt = mRandom.nextInt(); 

    PendingIntent pendingIntent = PendingIntent.getService(this, randomInt, startIntent,PendingIntent.FLAG_UPDATE_CURRENT); 
    mAlarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingIntent); 
} 
+3

Ну, если «день» до сегодняшнего дня, или «час» до этого и т. Д., Вы получите это поведение. – CommonsWare

ответ

4

Просто убедитесь, что время, установленное для тревоги, находится после текущего времени.

Существует простой способ проверить это.

вобще

Calendar.getInstance().getTimeInMilis() - c.getTimeInMillis() 

Войти этот результат, и вы можете увидеть, если второй находится перед первым. Теперь скажем, сейчас 4 часа, и вы устанавливаете тот же день и 3 часа. он будет активирован мгновенно.

Кроме этого, я не вижу причин, по которым он должен потерпеть неудачу.

Еще один способ тестирования - использовать currentTime и добавить let say 10k miliseconds и посмотреть, активируется ли он через 10 секунд после его проверки. Тогда вы уверены, что установленное время неверно в вашем случае.

Смежные вопросы