从Android中的AlarmManger中删除特定的ALARM

时间:2015-05-07 20:43:26

标签: android alarmmanager

我正在使用alarmManger制作提醒应用,但我不知道如何删除特定的闹钟。

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

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 10);
calendar.set(Calendar.MINUTE, 30);

Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
manager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);

接收器是一个普通且简单的接收器。

我的问题是我想编辑/删除已添加的警报。 我从概念上知道如何remove an alarm,但是当添加了几个警报时,我无法删除alarmManger中的特定警报。

5 个答案:

答案 0 :(得分:2)

您在警报管理器中设置的ID,您可以在代码中访问特定警报:

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

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 10);
calendar.set(Calendar.MINUTE, 30);

Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);

在此行选择 ID 彼此分开,然后您可以通过它的ID获取特定警报

PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), ID, intent, 0);
manager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);

答案 1 :(得分:1)

您需要具有唯一ID(requestCode),特定于您要取消的闹钟。我称之为customId。将该id传递给您的意图(而不是像您当前那样传递0)。

PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), customId, intent, 0);

存储customId但是您可以稍后使用标记PendingIntent.FLAG_UPDATE_CURRENT来获取警报:

PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), customId, intent, PendingIntent.FLAG_UPDATE_CURRENT)

然后你可以做你想要的alarmIntent。在您的代码中,您的警报管理器被称为manager,因此您可以调用:

manager.cancel(alarmIntent);

答案 2 :(得分:1)

您必须为PendingIntent设置唯一的requestCode:

设置:

PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext,
            11111, intent,
            PendingIntent.FLAG_UPDATE_CURRENT);

取消:

PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext,
            11111, intent,
            PendingIntent.FLAG_UPDATE_CURRENT);
    alarmManager.cancel(pendingIntent);

答案 3 :(得分:1)

取消AlarmManager时,请不要使用带有FLAG_CANCEL_CURRENT标志的PendingIntent。而是在取消警报后明确取消PendingIntent:

am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE);
Intent i = new Intent(getApplicationContext(),AlarmReceiver.class);
PendingIntent p = PendingIntent.getBroadcast(getApplicationContext(), 0, i, 0);
am.cancel(p); p.cancel();`

答案 4 :(得分:0)

这很简单。只需提供一个特定的请求代码,用于创建为每个警报创建待定意图  PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext(),您的特定代码,例如1001,intent,0);

当您要删除警报时,只需使用该特定代码创建待处理的意图并取消它。 PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext(),您的特定代码,例如1001,intent,0); alarmMgr.cancel(alarmIntent);

我希望这会对你有所帮助。