1. 概述
当你的应用需要使用类似闹钟功能的时候,可以用AlarmManager来实现。
2. 原理
AlarmManager是系统的闹铃管理器,可以给它添加或删除一个闹铃,并给这个闹铃提供一个广播接收器,
当时间到达的时候,它就会给那个广播接收器发送广播,我们就可以在广播接收器的onReceive
方法中
做自己的事情。
3. 代码演示
创建一个广播接收器:
/** * Created by fanshuo on 15/3/18. */ public class MyAlarmReceiver extends BroadcastReceiver{
@Override public void onReceive(Context context, Intent intent) { System.out.println("MyAlarmReceiver..."); } }
|
添加一个定时提醒
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, MyAlarmReceiver.class); PendingIntent sender = PendingIntent.getBroadcast(context, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 8); calendar.set(Calendar.MINUTE, 15); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0);
long triggerTime = calendar.getTimeInMillis(); am.setRepeating(AlarmManager.RTC_WAKEUP, triggerTime, INTERVAL, sender);
|
setRepeating方法有四个参数,含义如下:
type:闹钟类型,有四个可选值
- ELAPSED_REALTIME:以手机开机的时间为基准
- ELAPSED_REALTIME_WAKEUP:以手机开机的时间为基准,并且可以在休眠时发出广播
- RTC:以UTC标准时间为基准
- RTC_WAKEUP:以UTC标准时间为基准,并且可以在休眠时发出广播
triggerAtTime:第一次启动的时间,单位是毫秒。如果当前时间超过了triggerTime,就会立即启动这个定时提醒。此时应该设置为triggerTime + INTERVAL,
即:首次启动时间 + 循环间隔时间,也就是从下个循环开始启动。
- 如果type是前两种,就需要提前算好开机后多久启动,如果超过了设定的时间会立即启动;
- 如果type是后两种,需要设置一个标准时间的毫秒数。
interval:循环启动的间隔时间,单位是毫秒。也就是第一次启动之后,每隔多长时间启动一次。
operation:一个PendingIntent对象。这里用来封装BroadcastReceiver。
删除一个定时提醒
Intent intent = new Intent(context, MyAlarmReceiver.class); PendingIntent sender = PendingIntent.getBroadcast(context, 1, intent, PendingIntent.FLAG_CANCEL_CURRENT);//第二个参数必须和创建时的保持一致 AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); am.cancel(sender);
|
最后更新时间:
欢迎转载,请注明来源。