Android 保持螢幕喚醒不熄滅
阿新 • • 發佈:2019-02-11
這兩天工作比較忙,沒有時間更新部落格。今天難得閒下來,總結一下之前寫的一個Demo,用到了兩個小知識點:一是使用Thread加Handler實現計時,二是控制螢幕喚醒不熄滅。
首先是計時,首先我使用單純的Handler來實現計時,程式碼如下:
Handler handler = new Handler(); Runnable runnable = new Runnable() { @Override public void run() { timeSec ++; mTimeCount.setText("" + timeSec); handler.postDelayed(this, 1000); } };
但是這樣有個弊端,當我的主執行緒裡有Thread.Sleep延時操作時,這個時候計時就會暫停。所以需要在另外一個Thread裡來進行計時:
這樣UI在阻塞時,雖然我們的mTimeCount這個TextView沒有實時更新,但是計時函式還是在進行的,當UI執行緒的Thread.Sleep()結束時,就會更新。new Thread(new TimeThread()).start(); final Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case 1: timeSec++; if (timeSec < 60) { // 1分鐘以下情況 mTimeCount.setText("總耗時:" + timeSec + "秒"); } else if (timeSec < 3600) { // 1小時以下情況 int minutes = timeSec / 60; int second = timeSec % 60; mTimeCount.setText("總耗時:" + minutes + "分" + second + "秒"); } else { int hours = timeSec / 3600; int minutes = (timeSec - hours * 3600) / 60; int second = timeSec % 60; mTimeCount.setText("總耗時:" + hours + "時" + minutes + "分" + second + "秒"); } } super.handleMessage(msg); } };
下面看一下保持螢幕喚醒的邏輯:
private static PowerManager.WakeLock wakeLock;
public static void keepScreenOn(Context context, boolean on) { if (on) { PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); wakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, "==KeepScreenOn=="); wakeLock.acquire(); } else { if (wakeLock != null) { wakeLock.release(); wakeLock = null; } } }
在應用destory的時候得把wakeLock給release掉:
@Override
protected void onDestroy() {
super.onDestroy();
keepScreenOn(Main.this, false);
}
Android中通過各種Lock鎖對電源進行控制,需要注意的是加鎖和解鎖必須成對出現。
//啟用螢幕常亮功能
PowerManager pm =(PowerManager) getSystemService(POWER_SERVICE);
wakeLock= pm.newWakeLock(PowerManager.FULL_WAKE_LOCK| PowerManager.ACQUIRE_CAUSES_WAKEUP,
myPowerManager.TAG);
wakeLock.acquire();
//關閉 螢幕常亮功能
if (wakeLock != null) {wakeLock.release();}
需要注意的是,需要在mainfest許可權獲取
要進行電源的操作需要在AndroidManifest.xml中宣告該應用有設定電源管理的許可權。
<
uses-permission
android:name
="android.permission.WAKE_LOCK"
/>
<
uses-permission
android:name
="android.permission.DEVICE_POWER"
/>
另外,根據flags不同的值,實現不同級別的電源管理。
關於int flags 各種鎖的型別對CPU 、螢幕、鍵盤的影響:
PARTIAL_WAKE_LOCK :保持CPU 運轉,螢幕和鍵盤燈有可能是關閉的。
SCREEN_DIM_WAKE_LOCK :保持CPU 運轉,允許保持螢幕顯示但有可能是灰的,允許關閉鍵盤燈
SCREEN_BRIGHT_WAKE_LOCK :保持CPU 運轉,允許保持螢幕高亮顯示,允許關閉鍵盤燈
FULL_WAKE_LOCK :保持CPU 運轉,保持螢幕高亮顯示,鍵盤燈也保持亮度.
轉載請註明出處:周木水的CSDN部落格 http://blog.csdn.net/zhoumushui