如何取消AlarmManager的报警

时间:2015-03-08 02:46:03

标签: android

我遇到过这样的问题。 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);

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

2 个答案:

答案 0 :(得分:50)

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

答案 1 :(得分:1)

最初对我来说也没有用,在看到很多帖子之后我意识到要取消的未决意图应该与用于安排警报的原始待定意图相同。     待取消的未决意图应设置为相同的操作和相同的数据字段,如果有的话用于设置警报。设置相同的ACTION和数据值虽然我没有使用它们,但只取消了警报。 / p>