Android之AlarmManager学习
来源:互联网 发布:大数据列存储 编辑:程序博客网 时间:2024/05/17 18:48
参考http://www.cnblogs.com/zyw-205520/p/4040923.html(照搬过来的,不好意思了哈,作者,嘿嘿)
一、概述
生活就是一个不断的学习的过程,工作闲暇之余就喜欢弄一下没有接触过的东西,前几天同学给我说他要做一个类似闹钟的功能,而恰好我也没有弄过,所以就随便学习学习。
说说大致原理吧,感觉闹钟应该是一个定时提醒,它是通过获取一个闹钟管理器(AlarmManager),设置一个定时操作,然后通过一个意图(Intent)启动广播(BroadcastReceiver),然后在广播中做需要做的事。
二、学习过程
先熟悉一下AlarmManager的三个api
方法属性:
- set(int type, long triggerAtMillis, PendingIntent operation)
该方法用于设置一次性闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟执行时间,第三个参数表示闹钟响应动作。
- setRepeating(int type, long triggerAtMillis,long intervalMillis, PendingIntent operation)
该方法用于设置重复闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟首次执行时间,第三个参数表示闹钟两次执行的间隔时间,第三个参数表示闹钟响应动作。
- setInexactRepeating(int type, long triggerAtMillis,long intervalMillis, PendingIntent operation)
该方法也用于设置重复闹钟,与第二个方法相似,不过其两个闹钟执行的间隔时间不是固定的而已。
- int type:闹钟的类型,常用的有4个值:AlarmManager.ELAPSED_REALTIME、AlarmManager.ELAPSED_REALTIME_WAKEUP、AlarmManager.RTC、AlarmManager.RTC_WAKEUP。
- AlarmManager.ELAPSED_REALTIME表示闹钟在手机睡眠状态下不可用,该状态下闹钟使用相对时间(相对于系统启动开始),状态值为3;
- AlarmManager.ELAPSED_REALTIME_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用相对时间,状态值为2;
- AlarmManager.RTC表示闹钟在睡眠状态下不可用,该状态下闹钟使用绝对时间,即当前系统时间,状态值为1;
- AlarmManager.RTC_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟使用绝对时间,状态值为0;
- long triggerAtMillis:闹钟的第一次执行时间,以毫秒为单位,可以自定义时间,不过一般使用当前时间。需要注意的是,本属性与第一个属性(type)密切相关,如果第一个参数对应的闹钟使用的是相对时间(ELAPSED_REALTIME和ELAPSED_REALTIME_WAKEUP),那么本属性就得使用相对时间(相对于系统启动时间来说),比如当前时间就表示为:SystemClock.elapsedRealtime();如果第一个参数对应的闹钟使用的是绝对时间(RTC、RTC_WAKEUP),那么本属性就得使用绝对时间,比如当前时间就表示为:System.currentTimeMillis()。
- long intervalMillis:对于后两个方法来说,存在本属性,表示两次闹钟执行的间隔时间,也是以毫秒为单位。
- PendingIntent operation:是闹钟的执行动作,比如发送一个广播、给出提示等等。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)方法。如果这三种方法错用了的话,虽然不会报错,但是看不到闹钟提示效果。
AlarmManager类型如下:
- AlarmManager.RTC,硬件闹钟,不唤醒手机(也可能是其它设备)休眠;当手机休眠时不发射闹钟。
- AlarmManager.RTC_WAKEUP,硬件闹钟,当闹钟发射时唤醒手机休眠;
- AlarmManager.ELAPSED_REALTIME,真实时间流逝闹钟,不唤醒手机休眠;当手机休眠时不发射闹钟。
- AlarmManager.ELAPSED_REALTIME_WAKEUP,真实时间流逝闹钟,当闹钟发射时唤醒手机休眠;
首先需要一个你发送的广播
public class AlarmClockBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i("TAG", "intent.getIntExtra==" + intent.getIntExtra("data", 0000000)); }}
其次需要获取闹钟管理类AlarmManager
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
然后通过Intent启动BroadcastReceiver,设置启动的时间即可
private void setReminder(boolean b, int data) { Intent intent = new Intent("com.zrh528.alarmclock.AlarmClockBroadcastReceiver"); Bundle bundle = new Bundle(); bundle.putInt("data", data); intent.putExtras(bundle); PendingIntent pi = PendingIntent.getBroadcast(this, 101,intent, PendingIntent.FLAG_UPDATE_CURRENT); if (b) {// alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000L, 2000L, pi);// alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000L, pi); alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000L, 2000L, pi); } else { alarmManager.cancel(pi); } }
不知为何上边的三个方法设置了重复的时间间隔但是没用,大概都是一分钟左右发送一次广播,不知什么原因,闹钟类型我也全部试过,还是一样的,而且有时是一分钟发送一次,有时不定时,但是大概也再一分钟左右(测试为手机小米note,系统android6.0.1)。
0 0
- Android之AlarmManager学习
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- android学习笔记之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- 深入学习android之AlarmManager
- Android学习之AlarmManager使用
- Android AlarmManager学习
- android之定时器AlarmManager
- C#套接字Socket编程之最简单通信
- c++ winhttp通过https双向认证
- SpringMVC的web.xml的配置。
- 序
- Lowest Common Ancestor of a Binary Tree 二叉树中的最小公共父节点
- Android之AlarmManager学习
- 从最大似然到EM算法浅解
- 内部类,外部类成员的相互访问 及内部类对象的创建
- PL/SQL Developer执行.sql文件的几种方法
- Oracle 游标使用全解
- 编程之美: 求二叉树中节点的最大距离
- jq的插件的写法
- 使用Kotlin进行Android开发
- 获取checkbox的选中值