Android亮屏、熄屏控制

本网站用的阿里云ECS,推荐大家用。自己搞个学习研究也不错
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

未经允许不得转载:演道网 » Android亮屏、熄屏控制

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册