2013-02-23 4 views
0

Hi,Задержка диспетчера аварийных сигналов не работает

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

AlarmUtility.java

public void setAlarm(Context context) { 
    AlarmManager am = (AlarmManager) context 
      .getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(context, AlarmReceiver.class); 
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);  
    am.setRepeating(AlarmManager.RTC_WAKEUP, 1000 *24*3600, 
      1000 *24*3600, pi); // Millisec * Second * Minute 
    } // trying to first trigger the alarm after 24 hrs and repeat after 24 hours 

Пожалуйста, дайте мне знать, что это моя ошибка

ответ

0

1000 *24*3600, безусловно, в прошлом, и поэтому, сигнал будет trigger immediately:

Если происходит время в прошлом сигнал тревоги будет немедленно запущен , с подсчетом тревоги в зависимости от того, как далеко в прошлом trigger tim e относительно интервала повторения.

Вместо получить текущее время затем добавить 24 часа для щёток пробуждения:

Calendar calendar = Calendar.getInstance(); 
calendar.add (Calendar.DATE,1); 
long day = 1000 *24*3600; 

am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), day , pi); 
0

и должен использовать так:

am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+time, time, pi); 

и если уры хотят использовать 1000 *24*3600, а затем использовать (1000 *24*3600)L. потому что 1000 *24*3600 больше, чем Integer.Max_value.

+0

я право поблагодарить у – user2102570

0

При первом взгляде на проблему, кажется, с

am.setRepeating(AlarmManager.RTC_WAKEUP, 1000 *24*3600, 
     1000 *24*3600, pi); 

Второй параметр triggerAtTime должен указывать на время, когда сигнал тревоги должен уйти. Это не должно быть временным интервалом.

Проверьте ниже пример:

am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000 *24*3600, 
     1000 *24*3600, pi); 
Смежные вопросы