Android更好的学习与理解以及学习“”的思路

本文主要讲解“如何在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分钟,如果达到时间后设备处于休眠状态,则不会唤醒。

  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实现定时闹钟有了更深入的了解。经验,具体使用需要大家验证。这里是易素云,小编会为大家推送更多相关知识点的文章,欢迎关注!

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论