AlarmManager简介
AlarmManager实质是一个全局的定时器,是Android中常用的一种系统级别的提示服务,在指定时间或周期性启动其它组件(包括Activity,Service,BroadcastReceiver)。本文将讲解一下如何使用AlarmManager实现定时提醒功能。
闹钟配置
周期闹钟
Intent intent = new Intent();
intent.setAction(GlobalValues.TIMER_ACTION_REPEATING);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5 * 1000, 3 * 1000, sender);
setRepeating(int type,long startTime,long intervalTime,PendingIntent pi)
该方法用于设置周期性执行的定时服务。type:闹钟类型,startTime:闹钟首次执行时间,intervalTime:闹钟两次执行的间隔时间,pi:闹钟响应动作。
setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi)
该方法也用于设置周期定式服务,与上一种类似。不过其两个闹钟执行的间隔时间不是固定的。它相对而言更省电一些,因为系统可能会将几个差不多的闹钟合并为一个来执行,减少设备的唤醒次数。
intervalTime内置变量
间隔一天: INTERVAL_DAY
间隔半天: INTERVAL_HALF_DAY
间隔15分钟: INTERVAL_FIFTEEN_MINUTES
间隔半个小时: INTERVAL_HALF_HOUR
间隔一个小时: INTERVAL_HOUR
定时闹钟
//获得系统提供的AlarmManager服务的对象
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
//Intent设置要启动的组件,这里启动广播
Intent myIntent = new Intent();
myIntent.setAction(GlobalValues.TIMER_ACTION);
//PendingIntent对象设置动作,启动的是Activity还是Service,或广播!
PendingIntent sender = PendingIntent.getBroadcast(context, 0, myIntent,0);
//注册闹钟
alarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5 * 1000, sender);
set(int type,long startTime,PendingIntent pi)
该方法用于设置一次性定时服务。type:闹钟类型,startTime:闹钟执行时间,pi:闹钟响应动作。
取消闹钟
Intent myIntent = new Intent();
myIntent.setAction(GlobalValues.TIMER_ACTION);
//myIntent.setAction(GlobalValues.TIMER_ACTION_REPEATING);
PendingIntent sender = PendingIntent.getBroadcast(co