周期发送
我们已经完成了一个一次性的告警小例子,现在我们要实现一个重复周期性告警的小例子。代码如下:
private static int REQUEST_REPEAT_CODE = REQUEST_CODE + 1;
public void sendRepeatingAlarm(int intervalSecs){
Calendar cal = Utils.getTimeAfterInSecs(10);
mReport.reportBack(tag, "测试重复alarm,间隔时间" + intervalSecs + "秒,首次触发时间"
+ Utils.getDateTimeString(cal));
Intent intent = new Intent(mContext,TestReceiver.class);
intent.putExtra("message", "Repeat alarm" );
PendingIntent pi = PendingIntent.getBroadcast(mContext, REQUEST_REPEAT_CODE, intent, 0);
AlarmManager am = (AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis(),
intervalSecs * 1000,
pi);
}
一旦我们通过告警管理器的setRepeating()设置周期发送的告警,即时关闭APP,告警管理器仍会继续按期发送,必须通过告警管理器进行关闭。
取消告警
取消alarm的代码如下:
public void cancelRepeatingAlarm(){
mReport.reportBack(tag, "停止重复alarm");
Intent intent = new Intent(mContext,TestReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(mContext, REQUEST_REPEAT_CODE, intent, 0);
//要取消告警,首先构建一个同样request_code和内容(intent,包括向如同的目标接收器,但不包括extras,因为extras不用于判断intent的唯一性)的pending intent,然后通过告警管理器的cancel()进行删除
AlarmManager am = (AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE);
am.cancel(pi);
}