android – 如何取消AlarmManager的报警

我遇到过这样的问题.
Delete alarm from AlarmManager using cancel() – Android


我正在尝试使用两种不同的方法创建和删除警报,这两种方法都在应用程序的不同时刻调用.逻辑.

但是,当我调用AlarmManager的cancel()方法时,警报不会被删除.“

为了设置:

            Intent myIntent = new Intent(getApplicationContext(),
                    SessionReceiver.class);
            PendingIntent pendingIntent = PendingIntent.getbroadcast(
                    getApplicationContext(), 1, myIntent, 0);

            AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

            alarmManager.set(AlarmManager.RTC, Now.getTimeInMillis(),
                    pendingIntent);

删除

    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    Intent myIntent = new Intent(getApplicationContext(),
            SessionReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getbroadcast(
            getApplicationContext(), 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    alarmManager.cancel(pendingIntent);

但是这并没有删除注册的警报.
提前致谢.

解决方法:

需要创建PendingIntent,就像启动AlarmManager时一样,看起来主要的问题是你使用的是另一个requestCode(零而不是一个).

为了快速解决,这应该工作:

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent myIntent = new Intent(getApplicationContext(), SessionReceiver.class);
PendingIntent pendingIntent = PendingIntent.getbroadcast(
                                 getApplicationContext(), 1, myIntent, 0);

alarmManager.cancel(pendingIntent);

要使用PendingIntent.FLAG_UPDATE_CURRENT标志,请参阅以下内容

设置:

Intent myIntent = new Intent(getApplicationContext(), SessionReceiver.class);
PendingIntent pendingIntent = PendingIntent.getbroadcast(
                                getApplicationContext(), 1, myIntent, 
                                PendingIntent.FLAG_UPDATE_CURRENT);

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

alarmManager.set(AlarmManager.RTC, Now.getTimeInMillis(), pendingIntent);

取消:

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent myIntent = new Intent(getApplicationContext(), SessionReceiver.class);
PendingIntent pendingIntent = PendingIntent.getbroadcast(
                                getApplicationContext(), 1, myIntent, 
                                PendingIntent.FLAG_UPDATE_CURRENT);

alarmManager.cancel(pendingIntent);

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...