1

Il s'agit du code à définir et de supprimer les notifications. s'il vous plaît laissez-moi savoir si vous avez besoin de plus de détails. Les seules solutions sur le débordement de pile sont sur l'intention en suspens d'être identique. J'ai déjà essayé cette solution et cela n'a pas fonctionné.Impossible d'annuler l'intention en attente à l'aide du gestionnaire d'alarmes

public void setAlarm() throws java.text.ParseException { 
    RealmResults<Reminder> realmResults = getAllLatest(); 

    AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

    Reminder reminder = getLatestReminder(realmResults); 
    int hour = convertTimeToHoursAndMinutes(reminder.getReminderTime()).getHours(); 
    int minutes = convertTimeToHoursAndMinutes(reminder.getReminderTime()).getMinutes(); 
    PendingIntent pendingIntent = getPendingIntentFromReminder(reminder); 
    Log.v("Reminder is: ", String.valueOf(reminder)); 
    Calendar calendar = Calendar.getInstance(); 
    //calendar.setTimeZone(TimeZone.getTimeZone()); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY, hour); 
    calendar.set(Calendar.MINUTE, minutes); 


    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY , pendingIntent); 
} 
private PendingIntent getPendingIntentFromReminder(Reminder reminder) throws ParseException { 
    int hour = convertTimeToHoursAndMinutes(reminder.getReminderTime()).getHours(); 
    int minutes = convertTimeToHoursAndMinutes(reminder.getReminderTime()).getMinutes(); 
    Intent intent = new Intent(this, MyReceiver.class); 
    intent.setAction(reminder.getName()); 
    Uri data = Uri.withAppendedPath(Uri.parse("TYS"), 
      String.valueOf(reminder.getId())); 
    intent.setData(data); 
    Calendar calendar = Calendar.getInstance(); 
    //calendar.setTimeZone(TimeZone.getTimeZone()); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY, hour); 
    calendar.set(Calendar.MINUTE, minutes); 
    //Log.v("Test", calendar.getTimeZone().toString()); 
    // Log.v("Hours to show", String.valueOf(hour)); 
    // Log.v("Minutes to show", String.valueOf(minutes)); 
    intent.putExtra("reminderTitle", reminder.getName()); 
    // Log.v("Reminder Name", reminder.getName()); 
    intent.putExtra("notificationType", 1); 
    intent.putExtra("reminderId", String.valueOf(reminder.getId())); 
    intent.putExtra("reminderSubtitle", reminder.getSubTitle()); 
    intent.setAction(Long.toString(System.currentTimeMillis())); 
    Log.v("set Alarm", String.valueOf(intent)); 
    PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 
    return alarmIntent; 
} 

public void deleteReminderIntent(Reminder reminder) throws ParseException { 
    Log.v("deleteReminderIntent", String.valueOf(reminder)); 
    AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    PendingIntent pendingIntent =getPendingIntentFromReminder(reminder); 
    alarmMgr.cancel(pendingIntent); 
    pendingIntent.cancel(); 
    //alarmMgr.cancel(temp); 
    // alarmMgr.cancel(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent); 
} 

Répondre

1

Dans getPendingIntentFromReminder() Vous définissez le ACTION dans le Intent à l'heure actuelle. Lorsque vous appelez la méthode pour obtenir un PendingIntent pour annuler votre alarme, l'heure actuelle est différente, ainsi le ACTION ne correspondra pas au PendingIntent que vous avez utilisé pour régler l'alarme.

Pour annuler l'alarme, vous devez utiliser un Intent correspondant au Intent que vous avez utilisé pour régler l'alarme. Les paramètres suivants dans le Intent doivent correspondre:

  • ACTION
  • CATÉGORIE
  • DONNÉES
  • COMPOSANTE

Les "extras" dans le Intent sont ignorés, ils ne doivent pas nécessairement rencontre.

Pour plus de détails, voir https://stackoverflow.com/a/29590084/769265 et Is it possible to create multiple PendingIntents with the same requestCode and different extras?