標籤:android style blog http io ar color os 使用
我們在做電子書閱讀程式的時候可能會要求螢幕保持常亮,不希望它熄滅。它的原理也是利用系統服務,來操縱底層裝置。
一、系統服務——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讓手機主動亮屏的代碼