AlarmManager的使用
原文地址:http://www.cnblogs.com/kross/p/3643708.html
AlarmManager可以设定一个规定的时间,或者重复从某一个时间开始,等间隔的做一个操作。可以用来做一个闹钟程序,或者在特定的时间访问互联网。
获取AlarmManager和获取系统的其他服务是一样的,使用如下代码:
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
我们通过AlarmManager来发送一条请求到BroadcastReceiver,先简单的实现一个BroadcastReceiver。
public class MyReceiver extends BroadcastReceiver {
private static final String TAG = "MyReceiver";
@Override
public void onReceive(Context arg0, Intent arg1) {
Log.i(TAG, "onReceive");
Log.i(TAG, arg1.getAction());
}
}
做完这步之后,记得要在Manifest文件里面注册这个类,要不然是没有任何反应的……
然后我们就在MainActivity里面弄一个按钮,按钮的方法里面就创建Intent,让AlarmManager来发送请求。
public void foo(View v) {
Log.i(TAG, "foo");
Intent intent = new Intent(this, MyReceiver.class);
intent.setAction("hahah");
PendingIntent pi = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
//开机的时间到当前的时间
long time = SystemClock.elapsedRealtime();
//am.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 5000, pi);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 5000, pi);
Log.i(TAG, "foo over");
}
这里很重要的一点就是这个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的使用的更多相关文章
- Android中AlarmManager使用示例(持续更新,已经更改)
现在普遍的手机都会有一个闹钟的功能,如果使用Android来实现一个闹钟可以使用AtarmManager来实现.AtarmManager提供了一种系统级的提示服务,允许你安排在将来的某个时间执行一个服 ...
- Android随笔之——闹钟制作铺垫之AlarmManager详解
说实话,之前写的两篇博客Android广播机制Broadcast详解.Android时间.日期相关类和方法以及现在要写的,都算是为之后要写的闹钟应用做铺垫,有兴趣的话,大家可以去看看前两篇博客. 一. ...
- 用alarmmanager 多次发送PendingIntent
遇到如下问题 service中得一随机数 用alarmmanager 发送PendingIntent的时候,receiver收到的随机数不变. pendingintent传值经常获取到的值是第一次的值 ...
- 转:在Android中使用AlarmManager
原地址http://blog.csdn.net/maosidiaoxian/article/details/21776697 AlarmManager是Android中的一种系统级别的提醒服务,它会为 ...
- Android中使用AlarmManager进程被删除的解决办法
http://blog.csdn.net/zhouzhiwengang/article/details/13022325 在Android中,AlarmManager提供了不受休眠状态的系统定时功能, ...
- Android闹钟 AlarmManager的使用
Android闹钟 AlarmManager的使用 AlarmManager介绍 AlarmManager这个类提供对系统闹钟服务的访问接口. 你可以为你的应用设定一个在未来某个时间唤醒的功能. 当闹 ...
- WakeLock, AlarmManager, JobScheduler
应用程序耗电的实质,是所启用的硬件在消耗电量. 手机的耗电单元 CPU: 应用处理器(AP)和基带处理器(BB或BP) GPU(图形处理单元) 外设:wifi,BT, GPS,LCD等 AP是ARM架 ...
- Android 的 AlarmManager 和 wakeLock联合使用
http://stackoverflow.com/questions/6864712/android-alarmmanager-not-waking-phone-up 主要说的是,对于android ...
- [Android] 查看Android中的AlarmManager事件
reference to : https://segmentfault.com/a/1190000000404684 有时候我们需要设置一个alarmmanager事件 但是如果这个事件的时间是凌晨三 ...
- AlarmManager 实现闹钟的基本功能
先上效果图 这是一个利用AlarmManager做的最简单的闹钟!迟点再把重复响铃(例如星期一,星期三,重复响铃) 1.MainActivity package com.example.domeref ...
随机推荐
- 微信小程序云开发
什么是云开发? 云开发是由腾讯云联合微信团队为开发者提供的 包含 云函数.云数据库和云文件存储能力的后端云服务 云开发为开发者提供完整的云端支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 A ...
- 基于Centos7的比特币源码编译
因为一直比较熟悉Windows平台的开发,本来打算在windows下进行编译,但查了一些文章,发现还是在linux下编译成本最低,所以这里就以手头现有的Centos7环境进行代码编译. 一.代码获 ...
- Shader开发之烘焙Lightmap自发光
自己参考Build-in写了一套shader, 写完发现自发光部分在烘焙时不生效, 查阅资料发现需要在Material上设置为对应标记, 这部分功能可以像Standard Shader一样写在Shad ...
- Unity学习笔记(3):一些常用API和应用场景
Mathf.Lerp(float a,float b,float t)插值函数,当a < b时往a中插入t,以此来实现颜色,声音等渐变效果. GameObject.FindWithTag(str ...
- (转)CentOS7系统信息及运行情况查看
原文链接:https://blog.csdn.net/qq_42196196/article/details/85063911 系统信息 CPU信息 内存信息 显卡信息 硬盘信息 网络信息 用户信息 ...
- 百度地图在移动端下click无效的解决方案
这是由于百度地图在移动端屏蔽了click事件,在网上找到一种方法,利用touchClick方法来模拟click事件,代码如下(需要JQ插件): //给jquery添加touchClick方法 (fun ...
- iframe子页面position的fixed
前言: 首先说一说我昨天天的苦逼经历.中午吃饭时一同事跟我说,他做的项目嵌套iframe后,子页面的position设置fixed失效了. 经过反复询问,得知他用了两层iframe,再加上最外的父页面 ...
- Python基础_可迭代的/迭代器/生成器
介绍 可迭代的:内部实现了__iter__方法 迭代器:内部实现了__iter__,__next__方法 生成器:yield,yield from 使用 __iter__() __next__() _ ...
- hexo主题中添加相册功能
博客已迁移至http://lwzhang.github.io. 基本上所有的hexo主题默认都没有实现相册功能,一方面相册功能的需求较少,毕竟hexo主要是写博客用的:另一方面实现相册功能比较麻烦,比 ...
- Scrum立会报告+燃尽图(Final阶段第五次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2484 项目地址:https://coding.net/u/wuyy694 ...