PowerManager的作用在於對電源進行管理。
PowerManager相關的接口和設備電池一次性使用時間的長短有很大的關聯。除非非要使用時,儘可能最小限度的使用,並且要記得釋放。
可以通過調用Context.getSystemService(Context.POWER_SERVICE)獲取PowerManager實例。
你可能會用到的最主要的API爲:newWakeLock();將創建一個PowerManager.WakeLock對象。可以通過這個對象的API對電源進行管理。下面列舉一個實例:
- PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
- PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "helloyuling");
- wl.acquire();
- ...screen will stay on during this section.
- wl.release();
下面定義的flag,將一定程度上影響系統電源。這些flags是互斥的,你可以用其中的一個:
PARTIAL_WAKE_LOCK:屏幕和鍵盤燈允許熄滅;
SCREEN_DIM_WAKE_LOCK:屏幕保持點亮(屏幕將進入DIM狀態),鍵盤燈允許熄滅;
SCREEN_BRIGHT_WAKE_LOCK:屏幕保持點亮,鍵盤燈允許熄滅;
FULL_WAKE_LOCK:屏幕和鍵盤燈保持高亮顯示;
注意:
如果你獲取了一個PARTIAL_WAKE_LOCK,CPU將持續運行,與計時器無關(計時器指計算系統休眠的時間,當休眠時間到達某個值時,kernel將停止運行),甚至用戶按掛機鍵也無法停止;其他的WakeLocks,CPU將持續運行,但是用戶可以通過按掛機鍵的方式來使得設備休眠。
另外,可以額外添加下面兩個flags,此兩個flags只能作用於屏幕。但此兩個flags和PARTIAL_WAKE_LOCK聯合作用時,是無效的。
ACQUIRE_CAUSES_WAKEUP:
正常的WakeLocks是不能點亮屏幕的,然和,他們可以在屏幕點亮後保持點亮狀態。ACQUIRE_CAUSES_WAKEUP可以強制點亮屏幕。比較經典的用法是,當重要通知到來時,可以立刻點亮屏幕來通知用戶。(比如短信)
ON_AFTER_RELEASE:WakeLocks被釋放時,時鐘將被重置,使得屏幕點亮的時間稍微增長。
常用的API
void goToSleep(long time)
強制設備休眠。
Boolean isScreenOn()
判斷屏幕是否休眠。
PowerManager.WakeLock newWakeLock(int flags, String tag)
void userActivity(long when, Boolean noChangeLights)
(這個API沒理解,望知道的朋友告知,謝謝)
注意:
在使用以上函數的應用程序中,必須在AndroidManifest.xml文件中加入下面的權限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DEVICE_POWER" />
另,其他的點亮屏幕的方法(限於Activity):
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_TRUE_SCREEN_ON);