在特定时间停止Alarm Manager



我正在使用服务触发此报警管理器。所以我想在30分钟后停止报警管理器,因为它在10分钟后重复。取消在我的情况下不起作用请帮忙。

AlarmManager alarmMgr0 = (AlarmManager) 
getSystemService(Context.ALARM_SERVICE);
Intent intent0 = new Intent(getApplicationContext(), 
schedule.class);
PendingIntent pendingIntent0 = 
PendingIntent.getBroadcast(getApplicationContext(), 0, intent0, 0);
Log.e(TAG, "SiteIN called");
// Intent intent0 = new Intent(this, OldEntryRemover.class);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE,26);
calendar.set(Calendar.SECOND, 0);
if(Calendar.getInstance().after(calendar)){
// Move to tomorrow
calendar.add(Calendar.DATE, 1);
}

//set that timer as a RTC Wakeup to alarm manager object
// alarmMgr0.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent0);
alarmMgr0.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
10000 * 60, pendingIntent0);
try {
thread.sleep(30000 * 60);
} catch (InterruptedException e) {
e.printStackTrace();
}
alarmMgr0.cancel(pendingIntent0);

我会看看API,看看这是否真的是您想要的。

安排重复报警注意:对于定时操作(ticks,超时等(使用处理程序更容易、更高效。如果已经为同一IntentSender安排了警报,它将首先被取消。

与set(int,long,PendingIntent(类似,除了您也可以提供警报将自动重复的时间段此警报继续重复,直到用显式删除cancel(AlarmManager.OnAlarmListener(。如果指定的触发时间在过去,报警将立即触发,并带有报警计数取决于触发时间相对于重复间隔。

如果报警延迟(例如,由于系统睡眠,对于非WAKEUP警报类型(,则将尽快传递跳过的重复。之后,未来的警报将根据原始警报发送日程它们不会随时间漂移。例如,如果您设置了每隔一个小时的顶部都会重复出现警报,但手机处于睡眠状态从7:45到8:45,电话一响就会发出警报醒来后,下一个警报将在9点发出。

如果您的应用程序希望允许交付时间漂移以保证至少有一个特定的时间间隔在两次警报之间经过,则要采取的方法是使用一次性报警,在处理每个报警时自己安排下一个报警传送

最新更新