在 Android 中从 AlarmManger 中删除特定的 ALARM
Delete specific ALARM from AlarmManger in Android
我正在使用 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);
Receiver是一个普通的简单Receiver。
我的问题是我想edit/remove一个已经添加的闹钟。
我在概念上知道如何 remove an alarm,但是当添加了多个警报后,我无法删除 alarmManger 中的特定警报。
通过您在警报管理器中设置的 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);
您需要有一个唯一 ID (requestCode
),特定于您要取消的警报。我将该 ID 命名为 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);
您必须为 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);
取消 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();`
那就是 simple.Just 为每个 alarm.like 提供有关创建待定意图的特定请求代码
PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), 您的特定代码,例如 1001, intent, 0);
当您想删除警报时,只需使用该特定代码创建一个未决意图并将其取消。
PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), 您的特定代码,例如 1001, intent, 0);
alarmMgr.cancel(alarmIntent);
希望对您有所帮助。
我正在使用 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);
Receiver是一个普通的简单Receiver。
我的问题是我想edit/remove一个已经添加的闹钟。 我在概念上知道如何 remove an alarm,但是当添加了多个警报后,我无法删除 alarmManger 中的特定警报。
通过您在警报管理器中设置的 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);
您需要有一个唯一 ID (requestCode
),特定于您要取消的警报。我将该 ID 命名为 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);
您必须为 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);
取消 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();`
那就是 simple.Just 为每个 alarm.like 提供有关创建待定意图的特定请求代码 PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), 您的特定代码,例如 1001, intent, 0);
当您想删除警报时,只需使用该特定代码创建一个未决意图并将其取消。 PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), 您的特定代码,例如 1001, intent, 0); alarmMgr.cancel(alarmIntent);
希望对您有所帮助。