2

以下是我每天设置重复警报的代码。现在我需要在 2 天后停止闹钟。我试图在增加 2 天后停止警报,但它不起作用。请任何人帮助我。

Intent myIntent = new Intent(this, MyAlarmService.class);

    pendingIntent = PendingIntent.getService(this, (int) System.currentTimeMillis(), myIntent, 0); 

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);

    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, hour1);
    calendar.set(Calendar.MINUTE, min1);
    calendar.set(Calendar.SECOND, 0);   

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000, pendingIntent);

    Toast.makeText(this, "Start Daily Alarm", Toast.LENGTH_LONG).show(); 

     //trying to cancel after 2 days
    // add days to current date using Calendar.add method 

    calendar.add(Calendar.DATE, 2);       
    pendingIntent = PendingIntent.getService(this, (int) System.currentTimeMillis(), myIntent, 0);
    AlarmManager alarmManagerstop = (AlarmManager)getSystemService(ALARM_SERVICE);
    alarmManagerstop.cancel(pendingIntent);     
4

1 回答 1

2

在这里,您在第二个参数中以毫秒为单位传递系统时间。

PendingIntent.getService(this, (int) System.currentTimeMillis(), myIntent, 0);

在第二个参数中是请求代码已通过,所以你必须做这样的事情。

private static int REQUEST = 1;

您必须为您设置的每个警报保留此请求代码。请注意,如果您以相同的值传递此请求代码,那么它将覆盖您的警报。所以你必须传递唯一的请求代码。

为了停止警报,需要相同的请求代码来找到 PendingIntent 对象并像这样传递给 alarm.cancel 方法

private static int REQUEST = 1;
PendingIntent.getService(this, REQUEST, myIntent, 0);
AlarmManager alarmManagerstop = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManagerstop.cancel(pendingIntent); 

并且当您使用系统毫秒时,每毫秒都会更改一次,因此请求代码也会经常更改。要使用此毫秒,您可以存储在任何静态变量中,之后您可以使用相同的值。

于 2011-09-13T05:04:05.573 回答