本文主要讲解“如何在Android中使用Alarmmanager实现定时闹钟”。文章中的讲解内容简单明了,易学易懂。请按照小编的思路一起学习学习。 《如何在Android中使用Alarmmanager实现定时闹钟》!
Alarmmanager 主要管理硬件时钟。一些与时间相关的应用利用c 语言实现小闹钟,如日历、闹钟等,需要用到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
这部分封装了目录1中的代码,向上提供java接口,与客户端交互(如日历),接收客户端的时钟设置请求,时钟触发时通知客户端。
Alarm 是一种在预定时间触发 Intent 的独立方法。
警报超出了应用程序的范围,因此即使在应用程序关闭后,它们也可用于触发应用程序事件或操作。与 BroadcastReceiver 结合使用时,它们可以变得特别强大,通过设置警报来启动应用程序或执行操作,而无需打开或激活应用程序。
例如,您可以使用 Alarm 实现一个闹钟程序,该程序执行正常的网络查询,或在“非高峰”时间安排耗时或昂贵的操作。
对于只发生在应用生命周期的定时操作,Handler类结合Timer和Thread类是更好的选择,让Android更好的控制系统资源。
Android中的Alarm在设备处于睡眠模式时保持激活状态,并且可以设置唤醒设备;但是,当设备重新启动时,所有警报都会被取消。
Alarm的操作由AlarmManager处理,其系统服务可以通过getSystemService获取,如下图:
AlarmManageralarms=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
要创建新的警报,请使用 set 方法并指定警报类型、触发时间和警报触发时要调用的 Intent。如果您设置的警报发生在过去,它会立即触发。
有 4 种警报类型。您的选择将决定您在 set 方法中传递的时间值代表什么,具体时间或经过的时间:
RTC_WAKEUP
在指定时间(设置闹钟时),唤醒设备触发 Intent。
实时时钟
在明确的时间触发 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);
当警报到达时,您指定的 PendingIntent 将被触发。设置另一个警报并将现有警报替换为相同的 PendingIntent。
要取消一个Alarm,调用AlarmManager的cancel方法,传入你不想再触发的PendingIntent,如下代码所示:
alarms.cancel(pendingIntent);
在下面的代码片段中利用c 语言实现小闹钟,设置了两个Alarm,然后立即取消第一个Alarm。第一个警报明确设置为在特定时间唤醒设备并发送意图。秒设置为从设备启动,经过时间为30分钟,如果达到时间后设备处于休眠状态,则不会唤醒。
AlarmManageralarms=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
StringMY_RTC_ALARM=“MY_RTC_ALARM”;
StringALARM_ACTION=“MY_ELAPSED_ALARM”;
PendingIntentrtcIntent=PendingIntent.getBroadcast(this,0,new Intent(MY_RTC_ALARM),1);
PendingIntentelapsedIntent=PendingIntent.getBroadcast(this,0,new Intent(ALARM_ACTION),1);
//Wakeupandfireintentin5hours.(注释可能有错)
Datet=newDate();
t.setTime(java.lang.System.currentTimeMillis()+60*1000*5);
alarms.set(AlarmManager.RTC_WAKEUP,t.getTime(),rtcIntent);
//Fireintentin30minsifalreadyawake.
alarms.set(AlarmManager.ELAPSED_REALTIME,30*60*1000,elapsedIntent);
//Cancelthefirstalarm.
alarms.cancel(rtcIntent);
感谢阅读,以上是《如何在Android中使用Alarmmanager实现定时闹钟》的内容。经过本文的学习,相信大家对如何在Android中使用Alarmmanager实现定时闹钟有了更深入的了解。经验,具体使用需要大家验证。这里是易素云,小编会为大家推送更多相关知识点的文章,欢迎关注!
请登录后发表评论
注册
社交帐号登录