为了账号安全,请及时绑定邮箱和手机立即绑定

如何取消此重复警报?

如何取消此重复警报?

沧海一幻觉 2019-12-16 12:12:52
我在写一些提醒用户的东西。用户将为其事件设置提醒,当时间到了时,将设置重复警报以触发状态栏通知。但是,在选择通知或清除通知后,警报似乎不会停止。我不确定在何处取消此重复警报。以下是一些代码:在我的主要活动中设置重复警报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 alarmalarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime.getTimeInMillis(), 30 * 1000, sender);在我的OnReceive方法中,我只在状态栏中显示通知并将标记设置为 FLAG_AUTO_CANCELmanager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);// Set the icon, scrolling text and timestampNotification 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);当用户选择通知或清除通知时,如何停止警报?
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

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);



查看完整回答
反对 回复 2019-12-17
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

我尝试了各种方法,但无法使它起作用,所以我决定做一个肮脏的把戏。当我想取消重复的闹钟时,我使用创建闹钟的相同方法(因此替换了旧的闹钟),然后立即将其取消。使用此方法,如果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);

    }



查看完整回答
反对 回复 2019-12-17
?
烙印99

TA贡献1829条经验 获得超13个赞

在中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();



查看完整回答
反对 回复 2019-12-17
  • 3 回答
  • 0 关注
  • 540 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信