Pro Android学习笔记(一零四):Alarm Manager(2):周期发送和取消

文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处http://blog.csdn.net/flowingflying以及作者@恺风Wei。

昨天,终于去看牙周医生。牙医给了两个choices:方案A:打麻药,刮,每牙75,分四次。人为刀俎,我为鱼肉,磨刀霍霍向牙来。方案B:微创不打麻药,用设备弄,每牙100,分两次。两者区别听来一个是靠人力,一个是靠电力。这牙医健壮乎?否。我的牙健壮乎?Absolutly not。那就没有选择,只能是方案B。问:疼吗?答:比洗牙疼。问:能忍受吗?答:因人而异。好吧,那就直接来吧。没打麻药,实际还是有根管子喷笑气,起到麻醉的作用。医生带个眼镜,我想这更适合近距离的长时间操作。半个小时一个病人,也就是半口牙半小时1400,一小时一口牙2800,按2500算,一天8小时2万,一周10万,一年52周,就500万的营业额了。难怪牙医开私人诊所的最多。

周期发送

我们已经完成了一个一次性的告警小例子,现在我们要实现一个重复周期性告警的小例子。代码如下:

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);
}

 小例子代码在:Pro Android学习:Alarm Manager小例子

相关链接:我的Android开发相关文章

你可能感兴趣的:(Pro Android学习笔记(一零四):Alarm Manager(2):周期发送和取消)