Android中的AlarmManager的使用

1、AlarmManager,顾名思义,就是“提醒”,是Android中常用的一种系统级别的提示服务,在特定的时刻为我们广播一个指定的Intent。简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Intent,通常我们使用 PendingIntent,PendingIntent可以理解为Intent的封装包,简单的说就是在Intent上在加个指定的动作。在使用Intent的时候,我们还需要在执行startActivity、startService或sendBroadcast才能使Intent有用。而PendingIntent的话就是将这个动作包含在内了。

定义一个PendingIntent对象。
PendingIntent pi = PendingIntent.getBroadcast(this,0,intent,0);

2、AlarmManager的常用方法有三个:

(1)set(int type,long startTime,PendingIntent pi);

该方法用于设置一次性闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟执行时间,第三个参数表示闹钟响应动作。

(2)setRepeating(int type,long startTime,long intervalTime,PendingIntent pi);

该方法用于设置重复闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟首次执行时间,第三个参数表示闹钟两次执行的间隔时间,第三个参数表示闹钟响应动作。

(3)setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi);

该方法也用于设置重复闹钟,与第二个方法相似,不过其两个闹钟执行的间隔时间不是固定的而已。

3、三个方法各个参数详悉:

(1)int type: 闹钟的类型,常用的有5个值:AlarmManager.ELAPSED_REALTIME、 AlarmManager.ELAPSED_REALTIME_WAKEUP、AlarmManager.RTC、 AlarmManager.RTC_WAKEUP、AlarmManager.POWER_OFF_WAKEUP。

AlarmManager.ELAPSED_REALTIME表示闹钟在手机睡眠状态下不可用,该状态下闹钟使用相对时间(相对于系统启动开始),状态值为3;

AlarmManager.ELAPSED_REALTIME_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用相对时间,状态值为2;

AlarmManager.RTC表示闹钟在睡眠状态下不可用,该状态下闹钟使用绝对时间,即当前系统时间,状态值为1;

AlarmManager.RTC_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟使用绝对时间,状态值为0;

AlarmManager.POWER_OFF_WAKEUP表示闹钟在手机关机状态下也能正常进行提示功能,所以是5个状态中用的最多的状态之一,该状态下闹钟也是用绝对时间,状态值为4;不过本状态好像受SDK版本影响,某些版本并不支持;

(2)long startTime: 闹钟的第一次执行时间,以毫秒为单位,可以自定义时间,不过一般使用当前时间。需要注意的是,本属性与第一个属性(type)密切相关,如果第一个参数对 应的闹钟使用的是相对时间(ELAPSED_REALTIME和ELAPSED_REALTIME_WAKEUP),那么本属性就得使用相对时间(相对于 系统启动时间来说),比如当前时间就表示为:SystemClock.elapsedRealtime();如果第一个参数对应的闹钟使用的是绝对时间 (RTC、RTC_WAKEUP、POWER_OFF_WAKEUP),那么本属性就得使用绝对时间,比如当前时间就表示 为:System.currentTimeMillis()。

(3)long intervalTime:对于后两个方法来说,存在本属性,表示两次闹钟执行的间隔时间,也是以毫秒为单位。

(4)PendingIntent pi: 绑定了闹钟的执行动作,比如发送一个广播、给出提示等等。PendingIntent是Intent的封装类。需要注意的是,如果是通过启动服务来实现闹钟提 示的话,PendingIntent对象的获取就应该采用Pending.getService(Context c,int i,Intent intent,int j)方法;如果是通过广播来实现闹钟提示的话,PendingIntent对象的获取就应该采用 PendingIntent.getBroadcast(Context c,int i,Intent intent,int j)方法;如果是采用Activity的方式来实现闹钟提示的话,PendingIntent对象的获取就应该采用 PendingIntent.getActivity(Context c,int i,Intent intent,int j)方法。如果这三种方法错用了的话,虽然不会报错,但是看不到闹钟提示效果。

第二个参数i 一定要是唯一的,比如不同的ID之类的,(如果系统需要多个定时器的话)。

例子代码可以参考:

https://github.com/cayden/Alarm

时间: 2024-10-23 11:01:05

Android中的AlarmManager的使用的相关文章

[Android] 查看Android中的AlarmManager事件

reference to : https://segmentfault.com/a/1190000000404684 有时候我们需要设置一个alarmmanager事件 但是如果这个事件的时间是凌晨三点 我们不可能等到凌晨三点吧 adb中提供了查看alarmmanager的命令adb shell dumpsys alarm 通过这命令可以查看被放到定时队列里面的事件 RTC_WAKEUP #1: Alarm{52c2ad84 type 0 com.sina.weibo} type=0 when=

android 中处理崩溃异常并重启程序

有时候由于测试不充分或者程序潜在的问题而导致程序异常崩溃,这个是令人无法接受的,在Android中怎样捕获程序的异常崩溃,然后进行一些必要的处理或重新启动 应用这个问题困恼了我很久,今天终于解决了该问题,写篇文章记录一下. 首先捕获程序崩溃的异常就必须了解一下Java中UncaughtExceptionHandler这个接口,android沿用了此接口,在android API中: 通过实现此接口,能够处理线程被一个无法捕捉的异常所终止的情况.如上所述的情况,handler将会报告线程终止和不明

一个Demo学完Android中所有的服务(转)

说明:这个例子实现了Android中常见的许多服务,下面是实现的截图 接下来,以源代码的方式分析这个例子   1.MainActivity--主界面 这个类主要是实现用户所看到的这个Activity,其中包含了一系列的按钮,用户点击按钮执行相应的动作,所以在这个类中主要是对按钮的定义和对按钮绑定相应的监听器,下面是实现的代码: [java] view plaincopyprint? package lovefang.stadyService; import android.app.Activit

adroid中的AlarmManager的使用

adroid中的AlarmManager的使用 标签: androidactionservicecalendarclasshtml 2012-10-11 14:22 29367人阅读 评论(6) 收藏 举报 1.AlarmManager,顾名思义,就是"提醒",是Android中常用的一种系统级别的提示服务, 在特定的时刻为我们广播一个指定的Intent.简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的 Intent,通常我们使用 Pe

Android中即时通讯协议选择

Android中的即时通讯,就是客户端要与服务器建立长时间的连接,正常情况下Android中请求服务器数据后,连接一般断开.但即时通讯类的对消息的实时性要求比较高.需要客户端与服务器建立长时间的连接,这样,才能保证消息的时实性. 1.XMPP协议 1.XMPP基于xml,XMPP用TCP传递的是xml流.它具有xml的灵活性和扩展性.可以实现服务类实时通讯. XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上.借助于XML易于解析和阅读的特性. XMPP核

Android 中延时执行的几种方法

延时执行的方法主要有: 1.开启新线程:2.利用定时器:3.消息处理:4.利用AlarmManager 一.开启新线程 new Thread(new Runnable(){ public void run(){ Thread.sleep(XXXX); handler.sendMessage(); //告诉主线程执行任务 } }).start 二.利用定时器 TimerTask task = new TimerTask(){ public void run(){ //execute the tas

[译]Android 中的定时任务调度

原文地址:Schedule tasks and jobs intelligently in Android 原文作者:Ankit Sinhal 译者:PhxNirvana 校对者:ilumer.wilsonandusa 在近期的应用开发中,异步执行任务是很流行的,而且这些任务经常在应用的生命周期之外运行,如下载数据或更新网络资源.有些情况下我们还需要做一些并不是马上需要执行的工作.Android 提供了一些 API 来帮助我们在应用中调度这些任务. 选择合适调度器可以提升应用的性能并且延长电池使

android开发之AlarmManager的使用方法

android开发之AlarmManager的使用方法 在android开发过程中.经常会用到AlarmManager来定时发送一个广播,或者启动一个Service,又或者启动一个Activity.本文我们会分别介绍,在开发过程中AlarmManager的三种用法. 1.使用alarm来发送一个广播        首先,我们需要创建一个Intent的实例.用来发送广播.代码如下: 需要发送的action可以自己随便定义,以下代码实现每五秒就发送一个CLOCK广播 需要在Manifest中定义一个

Android中的时间:currentTimeMillis,uptimeMillis,elapsedRealtime

本文链接    http://blog.csdn.net/xiaodongrush/article/details/28613213 参考资料   http://developer.android.com/reference/android/os/SystemClock.html 1. 三种时间的相同点与不同点 相同点:都是相对时间. 不同点:比较的基准不同.currentTimeMillis可以被用户通过时钟设置,也可以网络校时,反正是要设置,如果不设置,计算机怎么会知道现在距离1970年1月