1

これは、uを設定して通知を削除するためのコードです。詳細が必要な場合はお知らせください。スタックオーバーフローに関する唯一の解決策は、同じであるという保留中の意図についてです。私はすでにその解決策を試したが、うまくいかなかった。 getPendingIntentFromReminder()アラームマネージャーを使用して保留中のインテントを取り消すことができません

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); 
} 

答えて

1

あなたは現在の時刻にIntentACTIONを設定します。 PendingIntentでアラームをキャンセルする方法を呼び出すと、現在の時刻が異なるため、ACTIONは、アラームの設定に使用したPendingIntentと一致しません。

アラームをキャンセルするには、アラームの設定に使用したIntentに一致するIntentを使用する必要があります。 Intentで以下のパラメータが一致している必要があります

  • ACTION
  • CATEGORY
  • DATA
  • COMPONENT

Intent内の任意の "エキストラ"は無視されているので、彼らがする必要はありません一致。詳細については

https://stackoverflow.com/a/29590084/769265Is it possible to create multiple PendingIntents with the same requestCode and different extras?

を参照してください
関連する問題