Android亮屏、熄屏控制
在Android应用开发中,不少的应用需要和屏幕打交道,例如闹钟响铃的时候要保持屏幕处于亮屏状态,而在提醒过后又需要将屏幕熄灭。那么,在Android中是怎样来控制亮屏和熄屏的呢?下面就揭开神秘的面纱。
一、PowerManager和PowerManager.WakeLock
从标题中就可以大概看出这两者的关系,它们的静态结构如下:
下面分别说一下它们的作用:
1、PowerManager
PowerManager是一个系统服务类,它是用来控制设备的电源的状态,例如,goToSleep就可以使设备进入睡眠状态,setBacklightBrightness可以用来控制背光的亮度。
PowerManager作为一个系统的服务,在整个系统中只有一个实例,所以可以使用Context.getSystemService()来获取:
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
分析到这里,可以更进一步的看出两者之间的关系,PowerManager是系统级别的管理者,每一个Application需要使用WakeLock都需要通过它来分配。
pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
上面的代码就是用来创建一个WakeLock的方法,其中,PowerManager.PARTIIAL_WAKE_LOCK是一个标志位,标志位是用来控制获取的WakeLock对象的类型,主要涉及到CPU、屏幕和键盘灯,下面说一下标志位的意义。
表一
Flag Value | CPU | Screen | Keyboard |
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 |
2、PowerManager.WakeLock
该类可以用来控制设备的工作状态。使用该类中的acquire可以用来使设备一直处于工作的状态,当然如果你不需要使用该设备了,就调用release来关闭。注意:在使用该类的时候,必须保证acquire和release是成对出现的。
根据acquire的实现,可以知道有两种方式可以确保acquire和release成对出现:
(1)、自动release
public void acquire(long timeout) {synchronized (mToken) {acquireLocked();mHandler.postDelayed(mReleaser, timeout);}}
调用该方法,就可以实现在timeout之后会自动调用release。
(2)、手动release
public void acquire() {synchronized (mToken) {acquireLocked();}
}
该函数不会自动release,就需要用户手动调用,所以使用的方式如下:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();..screen will stay on during this section..
wl.release();
二、PowerManager和PowerManager.WakeLock的使用步骤
说到这里,我们来总结一下使用这两个类的步骤,主要分为四步:
1、在AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
2、获取PowerManager的实例;
3、调用PowerManager的newWakeLock(int flags, String tag)的方法创建一个WakeLock的对象,其中flags标志位用来指示要获取的WakeLock的类型,不同的WakeLock对CPU、键盘和键盘灯有不同的影响,详细可以参照上一节的表一。
4、通过acquire()获取相应的锁,然后进行其他业务逻辑的操作,最后使用release()释放(释放是必须的)。
三、PowerManager和PowerManager.WakeLock的使用实例
public class AlertWakeLock {private static final String TAG = "AlertWakeLock";private static PowerManager.WakeLock sCpuWakeLock;static PowerManager.WakeLock createPartialWakeLock(Context context) {//第一步:获取PowerManager的实例PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);if(null == pm){return null;}//第二步:调用PowerManager中的newWakeLock方法创建一个WakeLock对象return pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |PowerManager.ACQUIRE_CAUSES_WAKEUP |PowerManager.ON_AFTER_RELEASE, TAG);}public static void acquireCpuWakeLock(Context context) {if (sCpuWakeLock != null) {return;}sCpuWakeLock = createPartialWakeLock(context);//第三步:acquire()获取相应的锁sCpuWakeLock.acquire();}public static void releaseCpuLock() {if (sCpuWakeLock != null) {//最后:release释放sCpuWakeLock.release();sCpuWakeLock = null;}}
}
Android亮屏、熄屏控制相关推荐
- android车机总是自动熄屏,华为Mata20 Pro等Android屏幕常亮/永不熄屏APP:no screen off v 1.16...
华为Mata20 Pro没有永不息屏选项了,但有些专用软件是需要一直运行和查看的,用这软件省去手指隔一段时间点一下屏幕的操作了 虽然刚打开no screen off会弹出的界面说只是针对旧手机有用,提 ...
- 2022-01-21 界面长亮不熄屏
1.在AndroidManifest.xml文件中添加权限 <uses-permission android:name="android.permission.WAKE_LOCK&qu ...
- Android系统永不熄屏和取消开机锁屏功能
Android系统取消开机锁屏功能和永不熄屏 源码 frameworks/base/packages/SettingsProvider/src/com/android/providers/settin ...
- Android让屏幕保持常亮,不熄屏的三种方法
转载自https://blog.csdn.net/superxlcr/article/details/78822544 方法一:持有WakeLock 首先获取WakeLock相关权限: <use ...
- 【Android】锁屏/熄屏之后,与蓝牙设备的连接就会自动断开
今天客户给反馈一个比较奇怪的问题,在OPPO Android6.0手机上,锁屏之后,与蓝牙设备的连接就会断开,但是其它手机却没有出现该问题.拿到这个问题一开始也是百思不得其解,但是一个无意中的操作,让 ...
- Windows锁屏和熄屏
文章目录 锁屏 熄屏 参考文献 锁屏 Win + L 熄屏 ScreenOff 创建快捷方式 → 快捷键 → Ctrl + Alt + L 参考文献 关闭屏幕快捷键 Windows实现快捷键熄屏功能
- android系统息屏设置_Android亮屏和熄屏控制
一. 前言 我们的Android应用程序很多需要和亮屏和熄屏打交道,比如闹钟的时候,需要保持亮屏,之后又需要熄屏.那么今天,我们来分析下这方面的功能. 二. 系统服务 --- PowerManager ...
- android如何定时息屏_Android亮屏和熄屏控制实例详解
本文实例讲述了Android亮屏和熄屏控制实现方法.分享给大家供大家参考,具体如下: 一.概述 我们的Android应用程序很多需要和亮屏和熄屏打交道,比如闹钟的时候,需要保持亮屏,之后又需要熄屏.那 ...
- android系统息屏设置_Android亮屏和熄屏控制实例详解
本文实例讲述了Android亮屏和熄屏控制实现方法.分享给大家供大家参考,具体如下: 一.概述 我们的Android应用程序很多需要和亮屏和熄屏打交道,比如闹钟的时候,需要保持亮屏,之后又需要熄屏.那 ...
最新文章
- c# BinaryFormatter 更换了命名空间反序列化遇到的问题
- Delphi Code Editor 之 编辑器选项
- css颜色rgba代码对照表_改善 CSS 的 10 个最佳实践
- 两个点击事件共用一个方法_工作必技:教你简单方法一个电脑开两个,多个微信!...
- 使用identity+jwt保护你的webapi(一)——identity基础配置
- 决定你人生命运的10年,你做了什么?
- Django模板语言相关内容
- 客户端连接故障检查流程手段
- 预定义类型未定义或导入_探索类型系统的底层 - 自己实现一个 TypeScript
- java面试题-基础篇(万字总结,带答案,面试官问烂,跳槽必备)
- 日均千万级消息规模,深捷旅使用函数计算释放运维压力
- 互联网内卷化下,“大或死”之外的另一路径是什么?
- 开源聚合支付平台学习
- 大数据周周看:百分点集团全资并购极速洞察,精准医疗创企“海普洛斯”获2.1亿元融资
- C#设置默认打印机界面
- mybatis的常用标签用法总结
- [模型生成]如何生成Veristand使用的动态文件模型
- 笔记本 win7 不能待机 不能休眠
- Android ViewPager 垂直滑动 纵向滑动 VerticalViewPager
- Python 使用pyplot画图