AlarmManager是Android中的一种系统级别的提醒服务,它会为咱们在特定的时刻广播一个指定的Intent。而使用Intent的时候,咱们还须要它执行一个动做,如startActivity,startService,startBroadcast,才能使Intent有用。一般咱们使用PendingIntent,它能够理解为对Intent的封装,包含了指定的动做。html
咱们能够经过PendingIntent的静态方法获得一个PendingIntent对象,以下:java
使用PendingIntent的getBroadcast (Context context, int requestCode, Intent intent, int flags)方法能够获得一个发送广播动做的PendingIntent对象。其中getBroadcast的第4个参数能够为如下4个常量或其余支持使用Intent.fillIn()来控制它的变量:android
FLAG_CANCEL_CURRENT:若是描述的PendingIntent对象已经存在时,会先取消当前的PendingIntent对象再生成新的。ide
FLAG_NO_CREATE:若是描述的PendingIntent对象不存在,它会返回null而不是去建立它。spa
FLAG_ONE_SHOT:建立的PendingIntent对象只使用一次。.net
FLAG_UPDATE_CURRENT:若是描述的PendingIntent对象存在,则保留它,并将新的PendingIntent对象的数据替换进去。code
接下来看AlarmManager,咱们经过如下代码来取得AlarmManager对象。xml
AlarmManager对象中经常使用的方法有三个:htm
一、set(int type,long startTime,PendingIntent pi),用于设置一次闹钟。对象
二、setRepeating(int type,long startTime,long intervalTime,PendingIntent pi),用于设置重复闹钟。
三、setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi),一样是用于设置重复闹钟,可是它是不许确的,相对于第二个方法,也更加节能。由于系统会将差很少的闹钟进行合并,以免在没必要要地唤醒设备。
在上面的三个方法中,type为闹钟的类型,它可使用如下四个常量:
ELAPSED_REALTIME:闹钟在睡眠状态下不可用,使用的是相对系统启动时间。
ELAPSED_REALTIME_WAKEUP:闹钟在睡眠状态下可用,使用的是相对系统启动时间。
RTC:闹钟在睡眠状态下不可用,使用的是真实时间。
RTC_WAKEUP:闹钟在睡眠状态下可用,使用的是真实时间。
startTime为闹钟开始时间。
intervalTime为闹钟间隔,在第三个方法中,内置的几个变量以下:
INTERVAL_FIFTEEN_MINUTES
INTERVAL_HALF_HOUR
INTERVAL_HOUR
INTERVAL_HALF_DAY
INTERVAL_DAY
若是咱们设定的是发送广播的闹钟,咱们还须要写一个广播接收器,并对其进行注册,它才会在闹钟开始的时候接收到广播。
若是要设定启动Activity或Service的闹钟,则在建立PendingIntent的时候,首先Intent对象需设定指定的Activity或Service的class对象,而后对应的调用PendingIntent.getActivity()或PendingIntent.getService()方法。
下面以设置发送广播的闹钟代码实例来看AlarmManager的使用:
首先设定一个闹钟:
在上面的例子中,就会从当前的时间开始,每10分钟启动一次闹钟提醒。须要注意的是,若是设定的开始时间已通过去,它会立刻启动闹钟提醒。
接下来须要写一个广播接收器来接收这个广播并进行处理。
代码以下:
而后咱们还须要注册这个广播接收器,这样它才能接收到广播。这里采用的是静态注册的方法,在AndroidManifest里进行注册: