如何在特定时间取消PendingIntent?

时间:2012-04-25 18:45:24

标签: java android service alarmmanager android-pendingintent

当我没有声明cancel但是当我声明cancel时没有触发时,AlarmManager工作正常。 这是代码:

Calendar c= Calendar.getInstance();
                c.set(Calendar.HOUR_OF_DAY, 0); 
                c.set(Calendar.MINUTE, 37);
                c.set(Calendar.SECOND, 0);

            Toast.makeText(this, c.getTime().toString(), Toast.LENGTH_LONG).show();
        intent = new Intent(TestAlarm.this, TestAlarmService.class);
        pi = PendingIntent.getService(TestAlarm.this, 1, intent, 0);
        AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
        am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);

cancel代码:

 c.add(Calendar.HOUR_OF_DAY, 0);
        c.add(Calendar.MINUTE, 38);
        c.add(Calendar.SECOND, 0);
        PendingIntent pi1=PendingIntent.getService(TestAlarm.this, 1, intent, 0);
        AlarmManager am1 = (AlarmManager) getSystemService(ALARM_SERVICE);
        //stopService(intent);
        am1.cancel(pi);

现在我想开始我的AlarmManager在12:37开始和cancel一两分钟后......但每当我使用cancel代码时{{1}永远不会发火...... 提前致谢! :)

1 个答案:

答案 0 :(得分:0)

将行am1.cancel(pi);更改为am1.cancel(pi1); - 您取消原来的PendingIntent

此外,在您的取消代码中,您正在调用c.add()(添加到当前日期/时间)而不是c.set()(明确设置下一个日期/时间)。通过调用c.add(Calendar.MINUTE, 38),您实际上将38分钟添加到当前日历,而不是将时间设置为12:38;