在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亮屏、熄屏控制相关推荐

  1. android车机总是自动熄屏,华为Mata20 Pro等Android屏幕常亮/永不熄屏APP:no screen off v 1.16...

    华为Mata20 Pro没有永不息屏选项了,但有些专用软件是需要一直运行和查看的,用这软件省去手指隔一段时间点一下屏幕的操作了 虽然刚打开no screen off会弹出的界面说只是针对旧手机有用,提 ...

  2. 2022-01-21 界面长亮不熄屏

    1.在AndroidManifest.xml文件中添加权限 <uses-permission android:name="android.permission.WAKE_LOCK&qu ...

  3. Android系统永不熄屏和取消开机锁屏功能

    Android系统取消开机锁屏功能和永不熄屏 源码 frameworks/base/packages/SettingsProvider/src/com/android/providers/settin ...

  4. Android让屏幕保持常亮,不熄屏的三种方法

    转载自https://blog.csdn.net/superxlcr/article/details/78822544 方法一:持有WakeLock 首先获取WakeLock相关权限: <use ...

  5. 【Android】锁屏/熄屏之后,与蓝牙设备的连接就会自动断开

    今天客户给反馈一个比较奇怪的问题,在OPPO Android6.0手机上,锁屏之后,与蓝牙设备的连接就会断开,但是其它手机却没有出现该问题.拿到这个问题一开始也是百思不得其解,但是一个无意中的操作,让 ...

  6. Windows锁屏和熄屏

    文章目录 锁屏 熄屏 参考文献 锁屏 Win + L 熄屏 ScreenOff 创建快捷方式 → 快捷键 → Ctrl + Alt + L 参考文献 关闭屏幕快捷键 Windows实现快捷键熄屏功能

  7. android系统息屏设置_Android亮屏和熄屏控制

    一. 前言 我们的Android应用程序很多需要和亮屏和熄屏打交道,比如闹钟的时候,需要保持亮屏,之后又需要熄屏.那么今天,我们来分析下这方面的功能. 二. 系统服务 --- PowerManager ...

  8. android如何定时息屏_Android亮屏和熄屏控制实例详解

    本文实例讲述了Android亮屏和熄屏控制实现方法.分享给大家供大家参考,具体如下: 一.概述 我们的Android应用程序很多需要和亮屏和熄屏打交道,比如闹钟的时候,需要保持亮屏,之后又需要熄屏.那 ...

  9. android系统息屏设置_Android亮屏和熄屏控制实例详解

    本文实例讲述了Android亮屏和熄屏控制实现方法.分享给大家供大家参考,具体如下: 一.概述 我们的Android应用程序很多需要和亮屏和熄屏打交道,比如闹钟的时候,需要保持亮屏,之后又需要熄屏.那 ...

最新文章

  1. c# BinaryFormatter 更换了命名空间反序列化遇到的问题
  2. Delphi Code Editor 之 编辑器选项
  3. css颜色rgba代码对照表_改善 CSS 的 10 个最佳实践
  4. 两个点击事件共用一个方法_工作必技:教你简单方法一个电脑开两个,多个微信!...
  5. 使用identity+jwt保护你的webapi(一)——identity基础配置
  6. 决定你人生命运的10年,你做了什么?
  7. Django模板语言相关内容
  8. 客户端连接故障检查流程手段
  9. 预定义类型未定义或导入_探索类型系统的底层 - 自己实现一个 TypeScript
  10. java面试题-基础篇(万字总结,带答案,面试官问烂,跳槽必备)
  11. 日均千万级消息规模,深捷旅使用函数计算释放运维压力
  12. 互联网内卷化下,“大或死”之外的另一路径是什么?
  13. 开源聚合支付平台学习
  14. 大数据周周看:百分点集团全资并购极速洞察,精准医疗创企“海普洛斯”获2.1亿元融资
  15. C#设置默认打印机界面
  16. mybatis的常用标签用法总结
  17. [模型生成]如何生成Veristand使用的动态文件模型
  18. 笔记本 win7 不能待机 不能休眠
  19. Android ViewPager 垂直滑动 纵向滑动 VerticalViewPager
  20. Python 使用pyplot画图

热门文章

  1. CCIE-OSPF Sham-Link
  2. 用友NC移动审批APP介绍
  3. 在现场 | 2021大学校长全球论坛——共创未来:大学的愿景与新使命
  4. 埃森哲宣布最新企业使命,启动十年来规模最大全球品牌焕新计划
  5. 解决Nvidia显卡DP接口无法进入BIOS
  6. 如何压缩mp3文件大小,5分钟学会4种方法
  7. 系统优化、清理软件新秀:360Amigo System Speedup中文绿色版
  8. Jetson TX1板载相机opencv调用打开
  9. 部署企业版lync2013之六:lync与exchange集成-1
  10. 人工智能+游戏 会带来什么