`

android 使用Alarm

 
阅读更多

使用Alarm

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

 RTC_WAKEUP

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

 

 RTC

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

 

 ELAPSED_REALTIME

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

 

 ELAPSED_REALTIME_WAKEUP

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

 

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

 

int alarmType = AlarmManager.ELAPSED_REALTIME_WAKEUP;

long timeOrLengthofWait = 10000;

String ALARM_ACTION = “ALARM_ACTION”;

Intent intentToFire = new Intent(ALARM_ACTION);

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intentToFire, 0);

alarms.set(alarmType, timeOrLengthofWait, pendingIntent);

 

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

 

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

 

alarms.cancel(pendingIntent);

 

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

 

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

 

String MY_RTC_ALARM = “MY_RTC_ALARM”;

String ALARM_ACTION = “MY_ELAPSED_ALARM”;

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

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

 

// Wakeup and fire intent in 5 hours.(注释可能有错)

Date t = new Date();

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

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

 

// Fire intent in 30 mins if already awake.

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

 

// Cancel the first alarm.

alarms.cancel(rtcIntent);

分享到:
评论

相关推荐

    android.AlarmClock

    总结起来,`android.AlarmClock`涉及的关键知识点包括`AlarmManager`的使用、权限管理、用户界面设计、广播接收器的实现以及数据持久化。在实际开发过程中,结合Android SDK文档和不断实践,我们可以构建出满足用户...

    Android_Alarm

    本篇将深入探讨如何利用Android的Alarm机制轻松创建定时任务。 Android的Alarm机制是系统级的服务,可以为应用程序提供长时间的定时功能。它分为两种类型:`PendingIntent`触发的Alarm和`BroadcastReceiver`触发的...

    Android_Alarm-master_androidalarm_

    本项目"Android_Alarm-master_androidalarm_"显然是一个针对初学者的Android闹钟功能实现示例。下面我们将深入探讨Android中的Alarm Manager及其相关知识点。 1. **Alarm Manager**: Alarm Manager是Android系统...

    android alarm alert

    本文将详细讲解Android Alarm和Alert的机制、使用方法以及如何在实际应用中实现相关功能。 一、Android Alarm 1. AlarmManager:Android中的AlarmManager服务是用于设置和管理长期或一次性闹钟的。它可以安排应用...

    Android中的Alarm

    在Android系统中,`Alarm`是一个非常重要的组件,它允许应用程序在未来的某个时间点执行一个操作,例如启动服务、发送广播或执行其他任务。`Alarm`是Android中的定时任务服务,开发者可以设置一次性或者周期性的任务...

    com.android.alarmclock

    标题中的"com.android.alarmclock"是Android操作系统中内置的一个应用程序的包名,它与手机的闹钟功能密切相关。在Android系统中,每个应用程序都有一个唯一的包名,这个包名就像是程序的身份证,用于区分系统中不同...

    android2.1内置闹钟源码AlarmClock

    在Android系统中,闹钟服务(AlarmClock)是系统级的重要功能之一,它允许开发者设置定时事件,并在指定时间触发提醒。本资源提供的是Android 2.1版本(API级别7)内置闹钟应用的源代码,对于学习和理解Android系统...

    Android OS之使用alarm

    Android OS手机,C语言编程使用alarm定时器;若手机echo mem > /sys/power/state即将进入deep! Z状态时,启动alarm定时器,当到达设定的时间点,手机暂时被唤醒(若不进行resume操作,稍等片刻,系统再次进入deep! Z...

    android alarmclock

    android alarmclock 源代码

    android-alarm.doc

    android-alarm.doc PendingInent 与 AlarmManager

    Android alarm流程从上层到内核的完整分析

    Android alarm流程从上层到内核的完整分析,很完整,代码分析很全

    文档-Android Alarm结构分析 + Linux高精度时钟分析

    在Android中,通常使用HRT来实现更精确的Alarm,但在某些情况下,如电池电量低,系统可能会切换到RTC以节省电力。 Linux高精度时钟分析主要关注中断驱动的定时器(如HPET或TICKless模式下的KVM虚拟时钟)和内核调度...

    android AlarmClock

    3. 权限管理:使用AlarmManager需要添加`<uses-permission android:name="android.permission.SET_ALARM" />`权限。 五、本地运行与调试 提供的DRLAlarmClock_01源码文件,是一个已经调试完成的AlarmClock示例。...

    Android闹钟内核驱动——Alarm.pdf

    - **节能管理**: 通过合理地使用 Alarm 驱动, 开发者可以减少不必要的唤醒次数, 从而达到节省能源的目的。 #### 结论 通过深入理解 Android 内核中的 Alarm 驱动, 开发者不仅可以更好地设计和实现各种定时任务, 还...

    android程序设计ALARM

    在Android程序设计中,"ALARM"通常指的是系统的AlarmManager服务,它允许应用程序安排在未来某个时间点触发一个事件。这个事件可以是启动一个服务、发送一个广播或者执行其他操作。在开发闹钟应用时,这一功能尤为...

    android上实现定时开机接口

    android上面alarm功能设置定时功能时,并不能把alarm写入到rtc芯片的alarm寄存器中,所以要实现定时开机功能,需要另外实现接口 代码中在4.4和5.1上已调试通过,通过增加jni接口直接对rtc ioctrl写入alarm操作,在...

    Alarm.7z,Android定时任务

    标题"Alarm.7z,Android定时任务"表明这是一个与Android平台上的定时任务相关的项目或库,可能包含了实现这一功能的相关代码和资源。 在Android中,主要使用以下几种方式来实现定时任务: 1. **AlarmManager**: 这...

    Android 开发的alarm

    在Android开发中,"Alarm"通常指的是系统的AlarmManager服务,它是Android系统提供的一种调度机制,允许开发者安排在未来的某个时间点执行特定任务。这个小项目可能是开发者为了学习和实践Android编程,尤其是...

Global site tag (gtag.js) - Google Analytics