如何在特定时间2天后停止我的报警服务?

时间:2011-09-13 04:39:51

标签: android alarmmanager android-pendingintent

以下是我每天设置重复闹钟的代码。现在我需要在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);     

1 个答案:

答案 0 :(得分: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); 

当你使用System milisecond时,每个毫秒都会发生变化,因此请求代码也经常变化。要使用此毫秒,您可以存储在任何静态变量之后,您可以使用相同的值。