1、AlarmManager,顾名思义,就是“提醒”,是Android中常用的一种系统级别的提示服务,可以实现从指定时间开始,以一个固定的间隔时间执行某项操作,所以常常与广播(Broadcast)连用,实现闹钟等提示功能

2、AlarmManager的常用方法有三个:

(1)set(int type,long startTime,PendingIntent pi);

该方法用于设置一次性闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟执行时间,第三个参数表示闹钟响应动作。

(2)setRepeating(int type,long startTime,long intervalTime,PendingIntent pi);

该方法用于设置重复闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟首次执行时间,第三个参数表示闹钟两次执行的间隔时间,第三个参数表示闹钟响应动作。

(3)setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi);

该方法也用于设置重复闹钟,与第二个方法相似,不过其两个闹钟执行的间隔时间不是固定的而已。

3、三个方法各个参数详悉:

(1)int type: 闹钟的类型,常用的有5个值:AlarmManager.ELAPSED_REALTIME、 AlarmManager.ELAPSED_REALTIME_WAKEUP、AlarmManager.RTC、 AlarmManager.RTC_WAKEUP、AlarmManager.POWER_OFF_WAKEUP。

AlarmManager.ELAPSED_REALTIME表示闹钟在手机睡眠状态下不可用,该状态下闹钟使用相对时间(相对于系统启动开始),状态值为3;

AlarmManager.ELAPSED_REALTIME_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用相对时间,状态值为2;

AlarmManager.RTC表示闹钟在睡眠状态下不可用,该状态下闹钟使用绝对时间,即当前系统时间,状态值为1;

AlarmManager.RTC_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟使用绝对时间,状态值为0;

AlarmManager.POWER_OFF_WAKEUP表示闹钟在手机关机状态下也能正常进行提示功能,所以是5个状态中用的最多的状态之一,该状态下闹钟也是用绝对时间,状态值为4;不过本状态好像受SDK版本影响,某些版本并不支持;

(2)long startTime: 闹钟的第一次执行时间,以毫秒为单位,可以自定义时间,不过一般使用当前时间。需要注意的是,本属性与第一个属性(type)密切相关,如果第一个参数对 应的闹钟使用的是相对时间(ELAPSED_REALTIME和ELAPSED_REALTIME_WAKEUP),那么本属性就得使用相对时间(相对于 系统启动时间来说),比如当前时间就表示为:SystemClock.elapsedRealtime();如果第一个参数对应的闹钟使用的是绝对时间 (RTC、RTC_WAKEUP、POWER_OFF_WAKEUP),那么本属性就得使用绝对时间,比如当前时间就表示 为:System.currentTimeMillis()。

(3)long intervalTime:对于后两个方法来说,存在本属性,表示两次闹钟执行的间隔时间,也是以毫秒为单位。

(4)PendingIntent pi: 是闹钟的执行动作,比如发送一个广播、给出提示等等。PendingIntent是Intent的封装类。需要注意的是,如果是通过启动服务来实现闹钟提 示的话,PendingIntent对象的获取就应该采用Pending.getService(Context c,int i,Intent intent,int j)方法;如果是通过广播来实现闹钟提示的话,PendingIntent对象的获取就应该采用 PendingIntent.getBroadcast(Context c,int i,Intent intent,int j)方法;如果是采用Activity的方式来实现闹钟提示的话,PendingIntent对象的获取就应该采用 PendingIntent.getActivity(Context c,int i,Intent intent,int j)方法。如果这三种方法错用了的话,虽然不会报错,但是看不到闹钟提示效果。

4、 AlarmManager使用示例:利用用户自定义广播实现闹钟功能,从当前时间开始,每隔10分钟提示一次

(1)实现原理:在 SendActivity.java中定义一个AlarmManager对象,指定该对象从当前时间开始,每隔10分钟向名为 “MYALARMRECEIVER”的广播接收器发出一条广播,附加消息内容为“你该打酱油了”;创建一个名为MyReceiver的广播接收器,在其 onReceive方法中获取Intent对象传过来的值(“你该打酱油了”)并用一个Toast组件显示出来;在 AndroidManifest.xml文件中注册SendActivity类和广播接收器类MyReceiver,设置MyReceiver的 action的值为“MYALARMRECEIVER”

(2)代码实现:

第一步:创建广播接收类MyReceiver.java,在其onReceive方法中获取Intent的附加信息msg,并用Toast组件显示

publicvoidonReceive(Context context,Intent intent){

String msg = intent.getStringExtra("msg");

Toast.makeText(context,msg,Toast.LENGTH_SHORT).show();

}

第二步:在AndroidManifest.xml中注册广播接收类MyReceiver.java,设置其action值为“MYALARMRECEIVER”

第三步:创建SendActivity.java,用于设置闹钟,定时发出广播

//创建Intent对象,action指向广播接收类,附加信息为字符串“你该打酱油了”

Intent intent = newIntent("MYALARMRECEIVER");

intent.putExtra("msg","你该打酱油了");

//创建PendingIntent对象封装Intent,由于是使用广播,注意使用getBroadcast方法

PendingIntent pi = PendingIntent.getBroadcast(this,0,intent,0);

//获取AlarmManager对象

AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);

//设置闹钟从当前时间开始,每隔10分钟执行一次PendingIntent对象,注意第一个参数与第二个参数的关系

am.setRepeating(AlarmManager.RTC_WAKEUP,System.currentMillis(),600*1000,pi);

第四步:在AndroidManifest中为SendActivity.java注册

java实现闹钟功能_AlarmManager类的应用(实现闹钟功能)相关推荐

  1. JAVA实现闹钟提醒功能_AlarmManager类的应用(实现闹钟功能)

    1.AlarmManager,顾名思义,就是"提醒",是Android中常用的一种系统级别的提示服务,可以实现从指定时间开始,以一个固定的间隔时间执行某项操作,所以常常与广播(Br ...

  2. java如何建Cube类,(JAVA)MyColorCube5(另一个Matrix3D类与面消隐)

    (JAVA)MyColorCube5(另一个Matrix3D类与面消隐) 实现功能:显示一个有颜色的正方体, 拖动鼠标时,正方体绕中心点转动. 虽然实现功能与MyColorCube2相似,但本例在My ...

  3. java语言定义一个具备栈功能的类_Java学习笔记 第二章 Java语言基础

    第二章 JAVA语言基础 一.关键字 1.关键字的定义和特点 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有的字母都为小写 2.用于定义数据类型的关键字 c;ass  interface ...

  4. Java.lang.Class类 isArray()方法有什么功能呢?

    转自: Java.lang.Class类 isArray()方法有什么功能呢? 下文讲述Class类中的isArray()方法的功能,如下所示: isArray()方法的功能 java.lang.Cl ...

  5. 复习Java第二个项目仿QQ聊天系统 03(两种通信类、登录以及注册功能完善) Java面试题并发编程相关知识生活【记录一个咸鱼大学生三个月的奋进生活】025

    记录一个咸鱼大学生三个月的奋进生活025 复习Java(仿QQ聊天系统03两种通信类.登录以及注册功能完善) TcpSocket类(与服务器进行通信) Server类(服务器类) TcpMessage ...

  6. Android旋转视频工具类,Android开发实现的IntentUtil跳转多功能工具类【包含视频、音频、图片、摄像头等操作功能】...

    本文实例讲述了Android开发实现的IntentUtil跳转多功能工具类.分享给大家供大家参考,具体如下: 说明:此工具类是本人开发中总结下来的,还有其它的跳转亲给我留言,希望大家一起把这个工具类打 ...

  7. java -d32_java11教程--JDK 10删除和不推荐的功能和选项-2

    工具/ javadoc(工具) 删除旧的(JDK 6,JDK 7和JDK 8 Era)标准Doclet 在此发行版中已删除了旧的(JDK 6,JDK 7和JDK 8时代)标准doclet,该标准doc ...

  8. java基础知识-对象和类

    前言: 因为要准备Java面试,所有将java基础知识点重新复习一遍,主要笔记来源于菜鸟教程和java核心技术的书籍中,也有一些博客上的资料(这些只供我个人学习使用) Java 对象和类 对象:对象是 ...

  9. File类遍历(文件夹)目录功能

    package com.learn.demo01.File;import java.io.File;/*File类遍历(文件夹)目录功能- public String[] list() :返回一个St ...

最新文章

  1. 在WinRT中读取资源文件
  2. HTML特殊字符编码对照表
  3. linux 操作系统详解,Linux操作系统详解
  4. WebLogic常见问题
  5. Java Script 第09章 Ajax应用
  6. 从零开始学ios开发(三):第一个有交互的app
  7. 显卡= GPU+显存(八)
  8. java docx4j 使用教程_使用Docx4j操作PPT指南系列(二)
  9. GIS中常用专业英文术语
  10. 【python】urlencode、quote、unquote
  11. py爬虫pandas
  12. 国信证券有限责任公司关于创设南航认沽权证的公告
  13. 业务流程驱动的数字化转型,中小微企业开启转型的最简单方法论
  14. MSP430F149;二、TIMEA
  15. openFOAM当中的收敛问题
  16. Java终结者和捷安特pp_终结者致命的弱点-我会怎么对付终结者
  17. 动态规划及动态规划的应用
  18. 【JAVA】奥林匹克五环(Olympic rings)
  19. 全国22家奶粉企业69批次产品检出三聚氰胺
  20. 意甲-因扎吉帽子戏法卡卡传射 AC米兰5-1追平尤文

热门文章

  1. Hex-Rays.Decompiler ...
  2. 太难了!产品经理想拿高薪
  3. 设计需要冲击力:「不怕没品味的人,就怕没品味的人用心」
  4. 全面解析java注解
  5. ELK 删除索引只保留10天
  6. 订单分类和评分--vue.js学习笔记2
  7. 一道面试题引发的关于程序设计的想法
  8. 6.3、分区表、分区表索引--Oracle模式对象
  9. nginx+tomcat+resin+jdk一键自动化安装脚本(4--resin安装脚本)
  10. 通过js判断不同终端类型,跳转到不同的页面