歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android亮屏、熄屏控制

Android亮屏、熄屏控制

日期:2017/3/1 10:03:02   编辑:Linux編程

在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();

Copyright © Linux教程網 All Rights Reserved