我正在使用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中的特定警报。
答案 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);
我希望这会对你有所帮助。