原文地址:http://www.cnblogs.com/kross/p/3643708.html

AlarmManager可以设定一个规定的时间,或者重复从某一个时间开始,等间隔的做一个操作。可以用来做一个闹钟程序,或者在特定的时间访问互联网。

获取AlarmManager和获取系统的其他服务是一样的,使用如下代码:

  1. AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);

我们通过AlarmManager来发送一条请求到BroadcastReceiver,先简单的实现一个BroadcastReceiver。

  1. public class MyReceiver extends BroadcastReceiver {
  2.  
  3. private static final String TAG = "MyReceiver";
  4.  
  5. @Override
  6. public void onReceive(Context arg0, Intent arg1) {
  7. Log.i(TAG, "onReceive");
  8. Log.i(TAG, arg1.getAction());
  9. }
  10. }

做完这步之后,记得要在Manifest文件里面注册这个类,要不然是没有任何反应的……

然后我们就在MainActivity里面弄一个按钮,按钮的方法里面就创建Intent,让AlarmManager来发送请求。

  1. public void foo(View v) {
  2. Log.i(TAG, "foo");
  3. Intent intent = new Intent(this, MyReceiver.class);
  4. intent.setAction("hahah");
  5.  
  6. PendingIntent pi = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
  7. AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
  8.  
  9. //开机的时间到当前的时间
  10. long time = SystemClock.elapsedRealtime();
  11.  
  12. //am.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 5000, pi);
  13. am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 5000, pi);
  14. Log.i(TAG, "foo over");
  15. }

这里很重要的一点就是这个elapsedRealtime这个东西,经过我的测试,终于发现这个时间是什么东西了。

它是你开机之后到当前的时间,怎么说呢,打个比方吧,假如你关掉手机,然后开机,开机完成后的第一件事就是调用这个SystemClock.elapsedRealtime()方法,你把它转成字符串,得到的时间是1970.01.01 08:00:00

然后你后续的调用都是基于这个时间之上的,比如开机后过了30s,你去调用这个方法,得到的时间就是1970.01.01 08:00:30

如果你又重新启动了手机,时间又会被重置1970.01.01 08:00:00

我看很多博客都没有讲清楚这一点,都是模糊的,照本宣科似得翻译了下文档,看得似懂非懂的。

AlarmManager的set方法就是发一次请求,setRepeating就是重复的发请求,这两个方法的第一个参数都十分的诡异,我并没有真正的搞明白。

其实可以分两组,一组是RLAPSED_REALTIME, RLAPSED_REALTIME_WAKEUP,另一组是RTC, RTC_WAKEUP,这两组的区别在于用的是哪一个时间,RLAPSED_REALTIME这一组用的是SystemClock.elapsedRealtime()取到的时间,让RTC用的就是正常的时间,这两者有什么区别呢,后者RTC,用户可以通过修改手机的时间(就是设置时间嘛,谁都可以做到)来改变,可能会重复调用到AlarmManager。而elapsed realtime是没有办法的。

然后就是这个WAKEUP的问题,文档上说是什么设备睡眠的时候会被唤醒,但是我不知道所谓的设备sleep是个什么状态……我做了一个5s发送一次请求的例子,启动后,把屏幕给关掉了(就是黑了屏,再进去要点亮屏幕,然后解锁),它还是会发送请求,并且也没有所谓的唤醒,所以这个没有搞明白……

原文地址:http://www.cnblogs.com/kross/p/3643708.html

新浪微博:http://weibo.com/KrossFord

AlarmManager的使用的更多相关文章

  1. Android中AlarmManager使用示例(持续更新,已经更改)

    现在普遍的手机都会有一个闹钟的功能,如果使用Android来实现一个闹钟可以使用AtarmManager来实现.AtarmManager提供了一种系统级的提示服务,允许你安排在将来的某个时间执行一个服 ...

  2. Android随笔之——闹钟制作铺垫之AlarmManager详解

    说实话,之前写的两篇博客Android广播机制Broadcast详解.Android时间.日期相关类和方法以及现在要写的,都算是为之后要写的闹钟应用做铺垫,有兴趣的话,大家可以去看看前两篇博客. 一. ...

  3. 用alarmmanager 多次发送PendingIntent

    遇到如下问题 service中得一随机数 用alarmmanager 发送PendingIntent的时候,receiver收到的随机数不变. pendingintent传值经常获取到的值是第一次的值 ...

  4. 转:在Android中使用AlarmManager

    原地址http://blog.csdn.net/maosidiaoxian/article/details/21776697 AlarmManager是Android中的一种系统级别的提醒服务,它会为 ...

  5. Android中使用AlarmManager进程被删除的解决办法

    http://blog.csdn.net/zhouzhiwengang/article/details/13022325 在Android中,AlarmManager提供了不受休眠状态的系统定时功能, ...

  6. Android闹钟 AlarmManager的使用

    Android闹钟 AlarmManager的使用 AlarmManager介绍 AlarmManager这个类提供对系统闹钟服务的访问接口. 你可以为你的应用设定一个在未来某个时间唤醒的功能. 当闹 ...

  7. WakeLock, AlarmManager, JobScheduler

    应用程序耗电的实质,是所启用的硬件在消耗电量. 手机的耗电单元 CPU: 应用处理器(AP)和基带处理器(BB或BP) GPU(图形处理单元) 外设:wifi,BT, GPS,LCD等 AP是ARM架 ...

  8. Android 的 AlarmManager 和 wakeLock联合使用

    http://stackoverflow.com/questions/6864712/android-alarmmanager-not-waking-phone-up 主要说的是,对于android ...

  9. [Android] 查看Android中的AlarmManager事件

    reference to : https://segmentfault.com/a/1190000000404684 有时候我们需要设置一个alarmmanager事件 但是如果这个事件的时间是凌晨三 ...

  10. AlarmManager 实现闹钟的基本功能

    先上效果图 这是一个利用AlarmManager做的最简单的闹钟!迟点再把重复响铃(例如星期一,星期三,重复响铃) 1.MainActivity package com.example.domeref ...

随机推荐

  1. Codeforces 914 C. Travelling Salesman and Special Numbers (数位DP)

    题目链接:Travelling Salesman and Special Numbers 题意: 给出一个二进制数n,每次操作可以将这个数变为其二进制数位上所有1的和(3->2 ; 7-> ...

  2. HDU - 5289 Assignment (RMQ+二分)(单调队列)

    题目链接: Assignment  题意: 给出一个数列,问其中存在多少连续子序列,使得子序列的最大值-最小值<k. 题解: RMQ先处理出每个区间的最大值和最小值(复杂度为:n×logn),相 ...

  3. 解决Linux下编译.sh文件报错 unexpected operator Syntax error: word unexpected

    执行一个脚本  发现报语法错误,但是在其他机器上运行都没有问题 唯一的区别就是 一个是centos机器  报错的是ubuntu 网上搜索了一下 因为Ubuntu默认的sh是连接到dash的,又因为da ...

  4. python并发编程之守护进程、互斥锁以及生产者和消费者模型

    一.守护进程 主进程创建守护进程 守护进程其实就是'子进程' 一.守护进程内无法在开启子进程,否则会报错二.进程之间代码是相互独立的,主进程代码运行完毕,守护进程也会随机结束 守护进程简单实例: fr ...

  5. C++模板的实现(模板函数和模板类,附带模板实现顺序表和链表代码)

    文章链接:https://blog.csdn.net/qq_38646470/article/details/80209469

  6. JAVA图书管理系统汇总共27个[转]

    java图书馆管理系统[优秀毕业设计论文+源码]http://down.51cto.com/data/68350java+sql server图书管理系统 http://down.51cto.com/ ...

  7. 利用shell连接服务器

    #应用 连接timesten 数据库 host = Linux(ip, 'user', 'pwd') # 传入Ip,用户名,密码host.connect() #主机开启cdsql = host.sen ...

  8. SpringMVC 完美解决PUT请求参数绑定问题(普通表单和文件表单)

    一 解决方案 修改web.xml配置文件 将下面配置拷贝进去(在原有的web-app节点里面配置 其它配置不变) <!-- 处理PUT提交参数(只对基础表单生效) --> <filt ...

  9. (1) Python 数据类型功能

    1.int 将字符串转化为数字 a="123"  print(type(a),a) b=int(a)  print(type(b),b) num="0011" ...

  10. Kaggle 广告转化率预测比赛小结

    20天的时间参加了Kaggle的 Avito Demand Prediction Challenged ,第一次参加,成绩离奖牌一步之遥,感谢各位队友,学到的东西远比成绩要丰硕得多.作为新手,希望每记 ...