2013-01-24 2 views
1
public void SetAlarm(Context context, int sec) 
{ 
    AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(context, Alarm.class); 
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
    am.set(AlarmManager.RTC, System.currentTimeMillis()+1000*5 , pi); 
    i = new Intent(context, Alarm.class); 
    pi = PendingIntent.getBroadcast(context, 0, i, 0); 
    am.set(AlarmManager.RTC, System.currentTimeMillis()+1000*10 , pi); 

} 

Почему onReceive работает только один раз, через 10 секунд?Android AlarmManager работает только один раз

ответ

6

Аварийный менеджер отменит первый аварийный сигнал, так как ожидающее намерение с той же информацией было предоставлено диспетчеру аварийной сигнализации. Любая тревога любого типа, чье намерение соответствует этому (как определено filterEquals (Intent)), будет отменено.

Если вы хотите установить несколько аварийных сигналов (повторяющихся или одиночных), вам просто нужно создать их PendingIntents с помощью другого requestCode. Если requestCode тот же, то новый будильник перезапишет старый.

попробовать с этим ...

public void SetAlarm(Context context, int sec) 
{ 
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
Intent i = new Intent(context, Alarm.class); 
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
am.set(AlarmManager.RTC, System.currentTimeMillis()+1000*5 , pi); 
i = new Intent(context, Alarm.class); 
pi = PendingIntent.getBroadcast(context, 1, i, 0); // new request code 
am.set(AlarmManager.RTC, System.currentTimeMillis()+1000*10 , pi); 

} 
+0

Один приемник класса - один сигнал? – Hemul

+0

вы устанавливаете два сигнала тревоги с одинаковыми данными о намерениях. Таким образом, последний будет отменять предыдущую тревогу. – Jambaaz

+0

Спасибо, это работает! :) – Hemul

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