Android中如何利用Alarmmanager实现一个定时闹钟-创新互联

这篇文章主要讲解了“Android中如何利用Alarmmanager实现一个定时闹钟”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android中如何利用Alarmmanager实现一个定时闹钟”吧!

成都创新互联是一家集网站建设,合山企业网站建设,合山品牌网站建设,网站定制,合山网站建设报价,网络营销,网络优化,合山网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

Alarmmanager主要管理硬件时钟。一些与时间相关的应用,如日历,闹钟等需要使用AlarmManager的服务。Alarmmanager功能相对比较简单,相关代码位于:

frameworks/base/core/jni/server/com_android_server_AlarmManagerService.cpp
frameworks/base/services/java/com/android/server/AlarmManagerService.java

一.frameworks/base/core/jni/server/com_android_server_AlarmManagerService.cpp

这部分代码直接管理硬件时钟,设备名为/dev/alarm。包括打开设备,关闭设备,设置时区,设置触发时间(timeout),以及等待时钟触发。

二.frameworks/base/services/java/com/android/server/AlarmManagerService.java

这部分封装目录一中的代码,向上提供java接口,同时与客户端(如calendar)交互,接收来自客户端的时钟设置请求,并在时钟触发时通知客户端。

Alarm是在预定的时间上触发Intent的一种独立的方法。

Alarm超出了应用程序的作用域,所以它们可以用于触发应用程序事件或动作,甚至在应用程序关闭之后。与BroadcastReceiver结合,它们可以变得尤其的强大,可以通过设置Alarm来启动应用程序或者执行动作,而应用程序不需要打开或者处于活跃状态。

举个例子,你可以使用Alarm来实现一个闹钟程序,执行正常的网络查询,或者在“非高峰”时间安排耗时或有代价的操作。

对于仅在应用程序生命周期内发生的定时操作,Handler类与Timer和Thread类的结合是一个更好的选择,它允许Android更好地控制系统资源。

Android中的Alarm在设备处于睡眠模式时仍保持活跃,它可以设置来唤醒设备;然而,所有的Alarm在设备重启时都会被取消。

Alarm的操作通过AlarmManager来处理,通过getSystemService可以获得其系统服务,如下所示:

AlarmManageralarms=(AlarmManager)getSystemService(Context.ALARM_SERVICE);

为了创建一个新的Alarm,使用set方法并指定一个Alarm类型、触发时间和在Alarm触发时要调用的Intent。如果你设定的Alarm发生在过去,那么,它将立即触发。

这里有4种Alarm类型。你的选择将决定你在set方法中传递的时间值代表什么,是特定的时间或者是时间流逝:

RTC_WAKEUP

在指定的时刻(设置Alarm的时候),唤醒设备来触发Intent。

RTC

在一个显式的时间触发Intent,但不唤醒设备。

ELAPSED_REALTIME

从设备启动后,如果流逝的时间达到总时间,那么触发Intent,但不唤醒设备。流逝的时间包括设备睡眠的任何时间。注意一点的是,时间流逝的计算点是自从它***一次启动算起。

ELAPSED_REALTIME_WAKEUP

从设备启动后,达到流逝的总时间后,如果需要将唤醒设备并触发Intent。

Alarm的创建过程演示如下片段所示:

intalarmType=AlarmManager.ELAPSED_REALTIME_WAKEUP; longtimeOrLengthofWait=10000; StringALARM_ACTION=“ALARM_ACTION”; IntentintentToFire=newIntent(ALARM_ACTION); PendingIntentpendingIntent=PendingIntent.getBroadcast(this,0,intentToFire, 0); alarms.set(alarmType,timeOrLengthofWait,pendingIntent);

当Alarm到达时,你指定的PendingIntent将被触发。设置另外一个Alarm并使用相同的PendingIntent来替代之前存在的Alarm。

取消一个Alarm,调用AlarmManager的cancel方法,传入你不再希望被触发的  PendingIntent,如下面的代码所示:

alarms.cancel(pendingIntent);

接下来的代码片段中,设置了两个Alarm,随后马上取消了***个Alarm。***个Alarm显  式地设置了在特定的时间唤醒设备并发送Intent。第二个设置为从设备启动后,流逝时间  为30分钟,到达时间后如果设备在睡眠状态也不会唤醒它。

  1. AlarmManageralarms=(AlarmManager)getSystemService(Context.ALARM_SERVICE);

  2. StringMY_RTC_ALARM=“MY_RTC_ALARM”;

  3. StringALARM_ACTION=“MY_ELAPSED_ALARM”;

  4. PendingIntentrtcIntent=PendingIntent.getBroadcast(this,0,new Intent(MY_RTC_ALARM),1);

  5. PendingIntentelapsedIntent=PendingIntent.getBroadcast(this,0,new Intent(ALARM_ACTION),1);

  6. //Wakeupandfireintentin5hours.(注释可能有错)

  7. Datet=newDate();

  8. t.setTime(java.lang.System.currentTimeMillis()+60*1000*5);

  9. alarms.set(AlarmManager.RTC_WAKEUP,t.getTime(),rtcIntent);

  10. //Fireintentin30minsifalreadyawake.

  11. alarms.set(AlarmManager.ELAPSED_REALTIME,30*60*1000,elapsedIntent);

  12. //Cancelthefirstalarm.

  13. alarms.cancel(rtcIntent);


感谢各位的阅读,以上就是“Android中如何利用Alarmmanager实现一个定时闹钟”的内容了,经过本文的学习后,相信大家对Android中如何利用Alarmmanager实现一个定时闹钟这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联网站建设公司,,小编将为大家推送更多相关知识点的文章,欢迎关注!


本文题目:Android中如何利用Alarmmanager实现一个定时闹钟-创新互联
分享链接:http://pwwzsj.com/article/dcghge.html