Android 電源管理PowerManager
PowerManager這個類提供了電源管理的一些功能,比如可以讓屏幕或者鍵盤亮起來等。還有對設備的重啟的api
官網是這么解釋的
PowerManager Class Overview
這個類提供了控制設備電源狀態的管理功能。
設備的電池的持續時間(壽命)會受到使用這個API的重要影響。在非必要的情況下不要使用WakeLock,即使必須使用,也要最低限度使用這個api,使用完之后應確保立即釋放掉。
通過 Context.getSystemService()獲得PowerManager的實例。
使用PowerManager的實例去獲得一個WakeLock對象,使用這個方法:newWakeLock() 創建一個
PowerManager.WakeLock
對象.使用WakeLock對象可以去管理設備電源的狀態,使用方法特別簡單:如下例子
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag"); wl.acquire(); //在釋放之前,屏幕一直亮著(有可能會變暗,但是還可以看到屏幕內容) wl.release();
下面定義的這些標記不同程度的影響系統電源。這些標記都是獨占的,并且每次只能指定其中一個。
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(高亮) |
如果你使用的是局部喚醒鎖的話(使用PARTIAL_WAKE_LOCK標志),CPU會繼續運行,將忽略任何的計時器,甚至按下電源按鈕。其他的喚醒鎖話,CPU也會繼續運轉,但是使用者仍然可以按電源按鈕讓設備睡眠。
另外,你可以使用兩個以上的標記,但是他只影響屏幕的行為。和 PARTIAL_WAKE_LOCK 同時使用的話,沒有任何影響。
Flag Value | Description |
---|---|
ACQUIRE_CAUSES_WAKEUP |
Normal wake locks don't actually turn on the illumination. Instead, they cause the illumination to remain on once it turns on (e.g. from user activity). This flag will force the screen and/or keyboard to turn on immediately, when the WakeLock is acquired. A typical use would be for notifications which are important for the user to see immediately.正常情況下是不會是屏幕等變亮,相反,當獲得wakeLock之后需要一個觸發事件才會使屏幕或者鍵盤變亮。典型應用是一個對用戶來說比較重要的通知時,使用這個鎖。 |
ON_AFTER_RELEASE |
If this flag is set, the user activity timer will be reset when the WakeLock is released, causing the illumination to remain on a bit longer. This can be used to reduce flicker if you are cycling between wake lock conditions.幫忙翻譯一下吧 |
一個小例子
package com.example.powers; import android.os.Bundle; import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.app.Activity; import android.content.Context; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.support.v4.app.NavUtils; public class MainActivity extends Activity { private WakeLock wakeLock; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override protected void onResume() { super.onResume(); // 開始獲得喚醒鎖 acquireWakeLock(); } @Override public void finish() { super.finish(); // 釋放鎖 releaseWakeLock(); } private void acquireWakeLock() { if (wakeLock == null) { Log.d("debug", "Acquiring wake lock"); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, this .getClass().getCanonicalName()); wakeLock.acquire(); } } private void releaseWakeLock() { if (wakeLock != null && wakeLock.isHeld()) { wakeLock.release(); wakeLock = null; } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!