如何取消活动中启动的警报并在广播接收器中取消警报

时间:2018-12-19 14:10:33

标签: android alarmmanager android-broadcastreceiver

我在一个活动中创建了一个警报,并试图在另一个广播接收器中取消它。该警报在特定时间触发,以向用户显示通知

我在这里检查了不同的帖子,但是没有用。

我正在使用的代码如下:

MainActivity.java

                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(mydateobj.getTime());
                calendar.set(Calendar.HOUR_OF_DAY, 9);
                calendar.set(Calendar.MINUTE, 20);
                Intent intent = new Intent(MainActivity.this, Myreceiver.class);
                AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                intent.putExtra("pendingIntent",pendingIntent);
                alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

以及我的 Broadcastreceiver 实现如下:

 @Override
    public void onReceive(Context context, Intent intent) {

        Intent  newIntent = new Intent(context,Myreceiver.class);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        if(intent!= null) {

            PendingIntent pendingIntent = intent.getParcelableExtra("pendingIntent");
            if(pendingIntent!=null)
            {

                alarmManager.cancel(pendingIntent);
                pendingIntent.cancel();
            }
        }

我得到的前瞻性Intent为null,因此它没有取消,所以我得到了重复的Notification。

我还尝试在接收器中创建具有相同ID和标志的 PendingIntent ,并尝试取消警报管理器以及在此接收器中创建的 pendingIntent ,但是它没有不行。

感谢您的帮助。

0 个答案:

没有答案