2013-07-10 11 views
10

Sto costruendo un'app che imposta 2 allarmi per ogni giorno della settimana (a una determinata ora e un minuto), gli allarmi si ripetono per sempre settimana dopo settimana.AlarmManager Android: c'è un modo per cancellare TUTTI gli allarmi impostati?

Ora il punto è: se l'utente cambia gli allarmi, sarà necessario cancellare gli allarmi precedentemente impostati.

C'è un modo per cancellare semplicemente tutti gli allarmi impostati dalla mia applicazione?

risposta

13

se si stanno annullando gli allarmi precedenti, quindi in PendingIntent il flag deve essere PendingIntent.FLAG_CANCEL_CURRENT. Impedirà la generazione di un nuovo PendingIntent se è già stato creato. E assicurarsi che prima di impostare in allarme basta annullare lo stesso PendingIntent e dopo di che impostare la sveglia. Si dovrebbe provare in questo modo:

AlarmManager 2AlarmsInWeekAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
PendingIntent pendingIntent = PendingIntent.getService/getActivity(context, int, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

2AlarmsInWeekAlarmManager.cancel(pendingIntent); 

e quindi è possibile utilizzare il metodo set o setRepeating. Nel tuo caso dovrebbe essere

2AlarmsInWeekAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, "timeInMillis", "repetitionTimeInMillis", pendingintent); 

Questo garantisce che prima di impostare un allarme per annullare tutti precedentemente allarme con lo stesso PendingIntent.

Spero che tu abbia ottenuto questo!

+0

Ho bisogno di un chiarimento. La documentazione cancel() dice "Rimuovi eventuali allarmi con un intento corrispondente". Questo significa che il codice di richiesta im getBroadcast (contesto contest, int requestCode, intento intent, int flags) deve essere uguale? Si prega di precisare. – user2731584

+1

ciao, il documento non dice molto su 'requestCode'. Ma se vedi 'getBroadcast' in [PendingIntent] (http://developer.android.com/reference/android/app/PendingIntent.html) che dice, recupera un' PendingIntent'. Quindi ** come da mia conoscenza ** se metti diversi 'requestCode's allora avrai 2 differenti' PendingIntent's, quindi mentre cancellerai sarà l'altro 'PendingIntent' invece di quello desiderato! Controlla anche [questo collegamento] (http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT). – thegiga

+0

Grazie per essere tornato da me. Consentitemi di leggere di nuovo la documentazione. Inoltre, non ho visto comunque la richiesta di un elenco di allarmi programmati da una classe. Qualche idea? – user2731584

Problemi correlati