当前位置: 首页 > 知识库问答 >
问题:

无法使用报警管理器取消挂起的意图

范承志
2023-03-14

这是设置u和删除通知的代码。如果你需要更多的细节,请告诉我。堆栈溢出的唯一解决方案是关于相同的挂起意图。我已经尝试过这个解决方案,但没有成功。

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个答案

司徒良哲
2023-03-14

getPendingIntentFromReminder()中,您将Intent中的ACTION设置为当前时间。当您调用方法以获取PendingIntent以取消您的闹钟时,当前时间不同,因此ACTION将与您用于设置闹钟的PendingIntent不匹配。

要取消报警,需要使用与设置报警时使用的意图相匹配的意图。意图中的以下参数必须匹配:

  • 行动
  • 类别
  • 数据
  • 组件

Intent中的任何“附加”都将被忽略,因此它们不需要匹配。

有关更多详细信息,请参阅https://stackoverflow.com/a/29590084/769265有没有可能用相同的请求代码和不同的附加代码创建多个PendingEvents?

 类似资料:
  • 理想情况下,我希望在应用程序暂停时调用,但为了使其正常工作,我从按钮调用方法。我在一个ArrayList中有一个ArrayList,它有一个如果列表和项设置为active,我希望发送到警报管理器的时间列表。如果有人能帮我弄明白为什么这是失败的,我会非常感激的。

  • 问题内容: 嗨,我正在开发警报应用程序,因为我需要在用户选择的不同日期的同一时间重复调用警报。 我meen如果我设置报警时间8PM和重复选项sunday,tuesday闹钟会在每个被调用sunday,tuesday。 任何帮助,将不胜感激。 问题答案: 为此使用广播接收器和Sqlite数据库。

  • 目前,我正在开发一个新的android项目,它使用后台服务。因为android版本 我的通知服务如下 我使用以下代码启动AlarmHandler 我还注册了以下广播接收器 我的问题是有时它会跳过我的通知。时间安排为晚上10:00和早上7:00。收到晚上10点的通知(请注意,我在晚上10:00使用电话或在晚上10:00前几分钟使用)。但并非所有时间都收到上午7:00的通知。还要注意的是,我每天都需要

  • 嗨,我目前正在使用警报管理器。我写了下面给出的代码。根据代码,警报管理器应该在10秒后触发,但在我的代码中,警报管理器会立即触发。请帮助。 还有我的警报接收课 我已经在清单中添加了所需的权限。

  • 下面是我的回复: 我走对路了吗?AndroidAlarmManager能做我想做的事情吗?我也不确定为什么隔离方法不能单独工作,我得到的唯一解释是我需要使用AndroidAlarmManager。现在,这些事件并不像我告诉他们的那样以100毫秒的速率发射,而是间隔1到几分钟发射。