我们在做电子阅读器的时候可能会要求屏幕保持常亮,不希望它熄灭。它的原理也是利用系统服务,来操纵底层设备。

一、系统服务——PowerManager

PowerManager.java就是管理我们电源方面的功能的,当然也包括我们屏幕的亮和熄灭。

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);

PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE);// init powerManager

因为PowerManager是系统服务,所以它的生命周期不是应用程序所能控制的;应用程序只能通过系统,向系统请求获取PowerManager服务,然后系统把这个服务的应用给我们用。

二、PowerManager.WakeLock

这个内部类可以真正实现控制屏幕

类型 cpu 屏幕 键盘
PARTIAL_WAKE_LOCK on off off
SCREEN_DIM_WAKE_LOCK on dim off
SCREEN_BRIGHT_WAKE_LOCK on Bright off
FULL_WAKE_LOCK on Bright Bright

由于它定义了这么多类型,每种类型可以指定相对应的部件工作和不工作。那么我们就可以利用这些类型,从最细粒度来控制我们的屏幕,控制我们的电源,从而让我们的电源工作时间尽可能的延长。

三、实际运用

1. 首先加入权限

<uses-permissionandroid:name="android.permission.WAKE_LOCK" />

2. 进行初始化

    private PowerManager.WakeLock mWakelock;
PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE);// init powerManager
mWakelock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP|
PowerManager.SCREEN_DIM_WAKE_LOCK,"target"); // this target for tell OS which app control screen

3. 强制亮屏

mWakelock.acquire(); // Wake up Screen and keep screen lighting

4. 取消强制亮屏,释放控制

mWakelock.release(); // release control.stop to keep screen lighting

PS:这里需要注意的是acquire和release必须成对使用

5. 有一种情况是类似于来电显示,我们不仅需要让屏幕点亮,而且还想要取消锁屏界面,该怎么做呢?

在AndroidManifest.xml中加上permission 权限:

<uses-permissionandroid:name="android.permission.DISABLE_KEYGUARD" />
    // 键盘锁管理器对象
KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
// 这里参数”kale”作为调试时LogCat中的Tag
KeyguardLock kl = km.newKeyguardLock("kale");
if (km.inKeyguardRestrictedInputMode()) {
// 解锁键盘
kl.disableKeyguard();
}

6. 在新版本中上面的代码变得不推荐了,系统给在activity显示时保持常亮提供了一个新的方法,使用方法也相当简单,下面这句只需要加在activity中即可。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

参考自:

http://blog.csdn.net/pku_android/article/details/7596968

http://bbs.51cto.com/thread-1018050-1.html

Android让手机主动亮屏的代码的更多相关文章

  1. python3:判断手机的亮屏状态

    在用python对手机做一些自动化操作时,常常会判断手机的亮屏状态,知晓手机的亮屏状态后才好做进一步的动作,如给屏幕解锁等.  用于了解手机的亮屏情况,有一个adb命令可用: adb shell du ...

  2. 基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码

    在ipad.iphone网页开发中,我们很可能需要判断是横屏或者竖屏.下面就来介绍如何用 jQuery 判断iPad.iPhone.Android是横屏还是竖屏的方法 其实主要是通过window.or ...

  3. js控制手机保持亮屏的库,解决h5移动端,自动息屏问题

    一些说明:我用Laya(ts)开发小游戏,有需要保持手机屏幕常亮的需求(非必须的),然后作为小白的我就在网上找到了这个库,大概了解下,应该是通过播放空视频的原理来保持手机屏幕常亮,然后就放到项目中试了 ...

  4. Jquery实现手机上下滑屏滑动的特效代码

    要引入两个jquery插件 可以去网上下载 <script src="jquery-1.11.1.min.js"></script><script s ...

  5. 解决Android手机 屏幕横竖屏切换

    Android中当屏幕横竖屏切换时,Activity的生命周期是重新加载(说明当前的Activity给销毁了,但又重新执行加载),怎么使屏幕横竖屏切换时,当前的Activity不销毁呢? 1. 在An ...

  6. Android 动态注册 亮屏、息屏广播

    /***************************************************************************** * Android 动态注册 亮屏.息屏广 ...

  7. 【Android】Android 手机忘记锁屏密码的解决办法

    对于忘记Android锁屏密码的筒子们,除重新刷包或者wipe data外,还可用adb来删除密码: 方法很简单 1.手机连接电脑,不要打开数据连接,在充电模式下进行. 2.在电脑上,解压adb.zi ...

  8. Android Notification实现推送消息过程中接受到消息端有声音及震动及亮屏提示

    在Android Notification状态栏通知一文中,简单实现了消息的推送效果,这里就接着上文说一下,当用户接受到消息时的提示效果 // 5-增加震动及声音及亮屏 notification.de ...

  9. android API版本对应的系统版本及Android获取手机和系统版本等信息的代码

    学了这么久的Android,竟然一直对其API对应的名称关系一值搞不清楚,现在网上认真看了下资料,转载一个觉得写得不错的作者的文章,记下来: [背景] 之前折腾android期间,慢慢地知道了,And ...

随机推荐

  1. Git(四)Git的分支管理

    一. 创建合并分支原理 在我们每次的提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支.HEAD指针严格来说不是指 ...

  2. vs2010 打包安装

    https://jingyan.baidu.com/article/b7001fe184e4e50e7382dd4e.html 1 建立安装项目2 要安装的文件都添加到应用程序文件夹3 在应用程序文件 ...

  3. Garph Coloring

    题意:给了一个有 n 个点 m 条边的无向图,要求用黑.白两种色给图中顶点涂色,相邻的两个顶点不能涂成黑色,求最多能有多少顶点涂成黑色.图中最多有 100 个点 该题是求最大独立集团  最大团点的数量 ...

  4. PHP-FPM 与 Nginx 的通信机制总结

    PHP-FPM 介绍   CGI 协议与 FastCGI 协议 每种动态语言( PHP,Python 等)的代码文件需要通过对应的解析器才能被服务器识别,而 CGI 协议就是用来使解释器与服务器可以互 ...

  5. Windows栈溢出原理

    1.栈是什么? 栈是一种运算受限的线性表 其限制是仅允许在表的一端进行插入和删除运算 这一端称为栈顶(TOP),相对的另一端称为栈底(BASE) 向一个栈插入新元素,称作进栈.入栈或压栈(PUSH) ...

  6. Plant Simulation常用命令

    Plant Simulation 是面向对象的三维离散事件仿真软件,使您能够快速.直观地构建逼真的物流模型. 您还可以使用高级统计工具执行复杂的生产分析.以下介绍该软件的一些常用命令. 1. clea ...

  7. MAC下安装Brew[转]

    MAC下安装Brew 1.安装XCode xcode-select --install 2.安装HomeBrew ruby -e "$(curl -fsSL https://raw.gith ...

  8. 【BZOJ-4184 】 Shallot 线段树按时间分治 + 线性基

    4184: shallot Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 356  Solved: 180[Submit][Status][Discu ...

  9. Codeforces Round #373 (Div. 2) A. Vitya in the Countryside 水题

    A. Vitya in the Countryside 题目连接: http://codeforces.com/contest/719/problem/A Description Every summ ...

  10. iOS图片设置圆角性能优化

    问题 圆角虽好,但如果使用不当,它就是你的帧数杀手,特别当它出现在滚动列表的时候.下面来看圆角如何毁掉你的流畅度的. 实测 layer.cornerRadius 我创建了一个简单地UITableVie ...