Android 程序在锁屏下仍然工作的方法
来源:互联网 发布:苹果6禁止通讯网络 编辑:程序博客网 时间:2024/06/07 02:01
今天有人问我,怎么实现锁屏也能监听音量键。我就和他说,把你要做的事情抽取出来放到service后台里,然后再设置service为保持唤醒。但是看到他还是比较迷惘,而且保持唤醒属于电源管理这块,可能也有些朋友不是很懂,这里我稍稍讲解一下。
一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使系统进入休眠状态,这时,Android系统中CPU会保持在一个相对较低的功耗状态。这样子就会使得应用程序很多操作,例如轮询,在锁屏后就无法工作了。这时候我们就要使用android的wakelock机制了。
<uses-permission android:name="android.permission.DEVICE_POWER"/>
WakeLock wakeLock = null; private void acquire() { if (null == wakeLock) { PowerManager pm = (PowerManager)this.getSystemService(Context.POWER_SERVICE); wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE, "MyService"); if (null != wakeLock) { wakeLock.acquire(); } } } private void release() { if (null != wakeLock) { wakeLock.release(); wakeLock = null; } }wakeLock作为电源管理powerManager的一部分,我们先看看官方的说明:
PowerManager:This class gives you control of the power state of the device.
PowerManager.WakeLock: lets you say that you need to have the device on.
我们使用wakeLock时需取得powermanager的对象,然后再去取得wakelock对象,其中newWakeLock()方法有两个参数,第二个是字符串,是你要使用WakeLock的service或其他的名称。第一个参数是锁的类型,不同的类型的WakeLock实现的效果也不一样:
PARTIAL_WAKE_LOCK:保持CPU 运转,屏幕和键盘灯有可能是关闭的。
SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯
SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯
FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度
ACQUIRE_CAUSES_WAKEUP:强制使屏幕亮起,这种锁主要针对一些必须通知用户的操作.
ON_AFTER_RELEASE:当锁被释放时,保持屏幕亮起一段时间。
如此一来,我们的程序就能继续在锁屏下进行各种监听、轮询等等。
欢迎加关注联系,相互学习。
如有转载,请注明出处:http://blog.csdn.net/hjhrq1991
- Android 程序在锁屏下仍然工作的方法
- 工作了仍然有在学校的感觉
- assert在程序的release版本中仍然有效
- 在Android命令行启动程序的方法
- 在Android命令行启动程序的方法
- Android 在程序中重启APP的方法
- [Android]ExpandableListView 在适配器中isChildSelectable方法返回了true,子目录点击仍然无响应解决方法
- 关闭ssh后仍然运行程序脚本的方法 -- 使用 screens
- 如何让php在关闭浏览器后还仍然执行当前的php脚本方法
- 语法仍然会工作
- android DatePickerDialog被取消后仍然会执行onDateSet方法的解决
- java程序的工作目录在哪里?
- 获取程序工作路径的方法
- 在android模拟器上安装apk程序的方法
- ALM(QC)在汉化的情况下,网页登录时仍然显示为英文并报错的配置方法
- 我在寻求工作治理的方法
- 点击一个程序,程序在操作系统的工作过程
- cocos2dx析构的对象仍然在引起crash问题的查找方法(经常会crash在draw方法中)
- 似水年华
- 10手柄服务
- Java之OOP基础
- Android Hal层简要分析
- 浅谈ADO.NET中的对象——Connection、Command、DataReader、DataAdapter、DataSet、DataTable
- Android 程序在锁屏下仍然工作的方法
- pthread_join()函数几点
- Goldengate Checkpoint Table Is Corrupted
- Service学习——第二篇(模拟执行长时间任务)
- 投诉举报项目中动态加载单选框、复选框
- c++中的虚函数
- Bluedroid的结构和代码分布
- Java语言进行扫描与执行命令
- ...Orz