以下是我每天设置重复闹钟的代码。现在我需要在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);
答案 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时,每个毫秒都会发生变化,因此请求代码也经常变化。要使用此毫秒,您可以存储在任何静态变量之后,您可以使用相同的值。