2013-10-08 4 views
0

В моем коде, я создаю тревогу следующим образом:Отмена тревоги в AlarmManager

AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
Intent i = new Intent("mypackage.START_MONITORING_SERVICE"); 
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
long timeForNextStart = System.currentTimeMillis() + elapsedTime; 
am.set(AlarmManager.RTC_WAKEUP, timeForNextStart, pi); 

Чтобы отменить тревогу, что я делаю это:

AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent("mypackage.START_MONITORING_SERVICE"); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 
am.cancel(pendingIntent); 

Мой вопрос, является ли это правильный путь для отмены всех аварийных сигналов одного и того же намерения. Документы говорят:

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

Я не совсем уверен, что определяет «подходящее намерение». Если я создаю несколько аварийных сигналов с вышеуказанным кодом, а затем отформатируйте отмену, как показано, будет ли она отменена ВСЕ из созданных вами тревог?

ответ

0

Вы должны использовать флаг PendingIntent ==> PendingIntent.FLAG_CANCEL_CURRENT четвертый параметр, создающий метод экземпляра pendingIntent.

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent,PendingIntent.FLAG_CANCEL_CURRENT); 
0

Попробуйте

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

    Intent updateServiceIntent = new Intent(context, MyPendingIntentService.class); 
    PendingIntent pendingUpdateIntent = PendingIntent.getService(context, 0, updateServiceIntent, 0); 

    // Cancel alarms 
    try { 
     alarmManager.cancel(pendingUpdateIntent); 
    } catch (Exception e) { 
     Log.e(TAG, "AlarmManager update was not canceled. " + e.toString()); 
    } 
0

Мой вопрос, является ли это правильный путь, чтобы отменить ВСЕ аварийные сигналы того же намерения?

Я не знаю, если вы в курсе requestCode должны быть уникальным для каждого pendingIntent для следующего синтаксиса

public static PendingIntent getService (Context context, int requestCode, Intent intent, int flags) 

Я не совсем уверен, что определяет «соответствующее намерение».

Каждая карта ожидающего намерения с ее предусмотренным намерением запускать и каждый код запроса с этим намерением.

Мы можем сказать, что это может быть такое же requestcode для двух разных pendingIntent, которые в идеале имеют два разных intents.

Помните, что здесь, если PendingIntent имеют одинаковый requestCode для одного и того же intent, то он может быть переопределение или отменить в соответствии с int flags

Если я создаю несколько будильников с приведенным выше кодом и затем peform отменить, как показано , будет ли он отменять ВСЕ тревоги, которые я создал?

Чтобы создать несколько тревог, вы должны дать другие requestCode с тем же intent. Если вы хотите, чтобы отменить те созданную тревогу, то вы должны отменить их по requestCode

Например

To Create : 

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
For (int i= 0 ; i <5 ; i++){ 
PendingIntent contentIntent = PendingIntent.getBroadcast(TaskReminder.this, i, 
          new Intent(),PendingIntent.FLAG_UPDATE_CURRENT); 
alarmManager.set(AlarmManager.RTC_WAKEUP, timeForNextStart, contentIntent); 

} 

To cancel : 

For (int i= 0 ; i <5 ; i++){ 
//Note here ' i ' is the requestCode which map each pendingIntent with there provided intent 
PendingIntent contentIntent = PendingIntent.getBroadcast(TaskReminder.this, i, 
          new Intent(),PendingIntent.FLAG_UPDATE_CURRENT); 
alarmManager.cancel(contentIntent); 

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