android Alarm 的使用(转)

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

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

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

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

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

Alarm的操作通过AlarmManager来处理,通过getSystemService可以获得其系统服务,如下所示:
       AlarmManager alarms = (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的创建过程演示如下片段所示:

java代码:

  1. int alarmType = AlarmManager.ELAPSED_REALTIME_WAKEUP;
  2. long timeOrLengthofWait = 10000;
  3. String ALARM_ACTION = “ALARM_ACTION”;
  4. Intent intentToFire = new Intent(ALARM_ACTION);
  5. PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intentToFire, 0);
  6. alarms.set(alarmType, timeOrLengthofWait, pendingIntent);

复制代码

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

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

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

java代码:

  1. AlarmManager alarms = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
  2. String MY_RTC_ALARM = “MY_RTC_ALARM”;
  3. String ALARM_ACTION = “MY_ELAPSED_ALARM”;
  4. PendingIntent rtcIntent = PendingIntent.getBroadcast(this, 0, new Intent(MY_RTC_ALARM), 1);
  5. PendingIntent elapsedIntent = PendingIntent.getBroadcast(this, 0, new Intent(ALARM_ACTION), 1);
  6. Date t = new Date();
  7. t.setTime(java.lang.System.currentTimeMillis() + 60*1000*5);
  8. alarms.set(AlarmManager.RTC_WAKEUP, t.getTime(), rtcIntent);
  9. alarms.set(AlarmManager.ELAPSED_REALTIME, 30*60*1000, elapsedIntent);
  10. alarms.cancel(rtcIntent);

复制代码

android Alarm 的使用(转)

时间: 2025-01-18 02:54:01

android Alarm 的使用(转)的相关文章

android Alarm闹钟发送广播播放音乐

通过网上的例子  自己根据相关功能修改的  如有不合理的地方  请提出来  互相学习 一共有3个类 MainActivity.java 主程序 AlarmReceiver.java 广播接收器 MusicService.java service播放音乐 MainActivity.java package com.yqy.yqy_alarm; import java.util.Calendar; import android.app.Activity; import android.app.Ala

Android中对闹钟Alarm的事件处理

之前的博文一直在持续分享Phone相关的知识也算是知识笔记,但在工作中难免遇到其它模块的一些问题,因此在解决这些问题的时候顺手将这些知识记录并分享出来.有些知识在不知道的时候会认为很难,当了解之后便会觉得很容易.同时部分知识也是具有时效性的,比如随着Android版本的更迭,Phone的架构变化等等,因此希望自己的笔记能够帮助到一些童鞋,这样就足够了. 转载请务必注明出处:http://blog.csdn.net/yihongyuelan Android中如果闹钟响起时,而应用需要对此做一些处理

android权限大全

android权限大全 访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米 获取精确位置 android.permission.ACCESS_FINE_LOCATION,通过GPS芯片接收卫星的定位信息,定位

第三十九讲:Android之AndroidManifest.xml文件中注册权限

积土而为山,积水而为海.--<荀子·儒效> 本讲内容:android权限详细 1 访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 2 获取错略位置 android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米 3 获取精确位置 android.permission.ACCESS

Android M 新的运行时权限开发者需要知道的一切

本文来自微凉一季的博客http://jijiaxin89.com/2015/08/30/Android-s-Runtime-Permission/ 更多文章点击跳转微凉一季 tags: 翻译,这是一篇译文. android M 的名字官方刚发布不久,最终正式版即将来临! android在不断发展,最近的更新 M 非常不同,一些主要的变化例如运行时权限将有颠覆性影响.惊讶的是android社区鲜有谈论这事儿,尽管这事很重要或许在不远的将来会引发很严重的问题. 这是今天我写这篇博客的原因.这里有一切

android 6.0权限全面详细分析和解决方案

原文: http://www.2cto.com/kf/201512/455888.html http://blog.csdn.net/yangqingqo/article/details/48371123 http://inthecheesefactory.com/blog/things-you-need-to-know-about-Android-m-permission-developer-edition/en 一.Marshmallow版本权限简介 android的权限系统一直是首要的安全

Android Manifest 权限描述大全

android permission常用权限说明 android.permission.ACCESS_CHECKIN_PROPERTIES 访问登记属性 读取或写入登记check-in数据库属性表的权限 android.permission.ACCESS_COARSE_LOCATION 获取错略位置 通过WiFi或移动基站的方式获取用户错略的经纬度信息, 定位精度大概误差在30~1500米 android.permission.ACCESS_FINE_LOCATION 获取精确位置 通过GPS芯

Android : M 与 N 的权限管理

从 M 开始,permission 分为 Normal permission Runtime permission Normal permission 直接在 manifest 里声明就可以用了. android.permission.ACCESS_LOCATION_EXTRA_COMMANDS android.permission.ACCESS_NETWORK_STATE android.permission.ACCESS_NOTIFICATION_POLICY android.permiss

android权限大全转http://www.cnblogs.com/classic/archive/2011/06/20/2085055.html

访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米 获取精确位置 android.permission.ACCESS_FINE_LOCATION,通过GPS芯片接收卫星的定位信息,定位精度达10米以内 访问定