如何取消此重复警报?

我在写一些提醒用户的东西。用户将为其事件设置提醒,当时间到了时,将设置重复警报以触发状态栏通知。但是,在选择通知或清除通知后,警报似乎不会停止。我不确定在何处取消此重复警报。以下是一些代码:在我的主要活动中设置重复警报


alarmTime = Calendar.getInstance();

Intent intent = new Intent(this, AlarmReceive.class);

PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);


alarmTime.add(Calendar.MINUTE,offset_time);


//Schedule the alarm

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime.getTimeInMillis(), 30 * 1000, sender);

在我的OnReceive方法中,我只在状态栏中显示通知并将标记设置为 FLAG_AUTO_CANCEL


manager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);


// Set the icon, scrolling text and timestamp

Notification notification = new Notification(R.drawable.medical, text, System.currentTimeMillis());


PendingIntent contentIntent = PendingIntent.getActivity(context, 0, i, 0);


notification.flags = Notification.FLAG_AUTO_CANCEL;


manager.notify(R.string.service_text, notification);

当用户选择通知或清除通知时,如何停止警报?


沧海一幻觉
浏览 545回答 3
3回答

慕姐4208626

cancel()以AlarmManager与PendingIntent您使用的等效的方式调用setRepeating():Intent intent = new Intent(this, AlarmReceive.class);PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);alarmManager.cancel(sender);

一只斗牛犬

我尝试了各种方法,但无法使它起作用,所以我决定做一个肮脏的把戏。当我想取消重复的闹钟时,我使用创建闹钟的相同方法(因此替换了旧的闹钟),然后立即将其取消。使用此方法,如果boolean变量设置为true,它将创建警报,它会替换并取消具有相同ID的替换:static void CancelRepeatingAlarm(Context context, boolean creating){    //if it already exists, then replace it with this one    Intent alertIntent = new Intent(context, AlertReceiver.class);    PendingIntent timerAlarmIntent = PendingIntent            .getBroadcast(context, 100, alertIntent,PendingIntent.FLAG_CANCEL_CURRENT);     AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);    if (creating){        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), INTERVAL, timerAlarmIntent);    }else{        alarmManager.cancel(timerAlarmIntent);    }

烙印99

在中MainActivity,设置闹钟时间。如果要使用多个警报,请使用SharedPreferences来存储它们各自的ID。这是代码:PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, _id,intent, PendingIntent.FLAG_UPDATE_CURRENT);alarmManager = (AlarmManager) getSystemService(Activity.ALARM_SERVICE);alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(),            pendingIntent);public static Context getContext() {    return mContext;}mContext=mainactivity.this;您第二次Activity使用来自的相同ID SharedPreferences。在我的代码中,我从ArrayList获得ID Alarm_id。最后,您可以在此处使用MainActivity上下文MainActivity.getContext()。这是代码:AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);Intent intentAlarm = new Intent(AlarmListviewActivity.this,        MainActivity.class);PendingIntent morningIntent = PendingIntent.getBroadcast(MainActivity.getContext(), Alarm_id.get(positon),        intentAlarm, PendingIntent.FLAG_CANCEL_CURRENT);alarmManager.cancel(morningIntent);morningIntent.cancel();
打开App,查看更多内容
随时随地看视频慕课网APP