WakeLock的使用

Android 保持屏幕常亮的3種實現

1. 持有WakeLock

//  1. 此種方式,需要申明權限
<uses-permission android:name="android.permission.WAKE_LOCK" />

// 2. 通過PowerManager獲取屏幕電源管理的服務
PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE);
if (powerManager != null) {
	// PowerManager.FULL_WAKE_LOCK 這裏有幾個Flag,分別對應幾種形式的電源管理狀態
	// 比如:屏幕常亮等
	// WakeLock獲取時相關的flag如下所示:
	// 1. PARTIAL_WAKE_LOCK :保持CPU 運轉,屏幕和鍵盤燈有可能是關閉的。
	// 2. SCREEN_DIM_WAKE_LOCK :保持CPU 運轉,允許保持屏幕顯示但有可能是灰的,允許關閉鍵盤燈
	// 3. SCREEN_BRIGHT_WAKE_LOCK :保持CPU 運轉,允許保持屏幕高亮顯示,允許關閉鍵盤燈
	// 4. FULL_WAKE_LOCK :保持CPU 運轉,保持屏幕高亮顯示,鍵盤燈也保持亮度
	mWakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "WakeLock");
 }

// 3. 一般在單個Activity中實現方式(一定要保證申請獲取和釋放是成對出現)

 	/**
     * 控制手機電源管理.
     */
    public PowerManager.WakeLock mWakeLock;
    
	@Override
    protected void onResume() {
        super.onResume();
        getWakeLock(this)
    }
 
    @Override
    protected void onPause() {
        super.onPause();
        releaseWakeLock(this);
    }

	/**
     * 1. 點亮屏幕,防止屏幕息屏
     */
    @SuppressLint("InvalidWakeLockTag")
    public void getWakeLock(Context ctx) {
        if (mWakeLock == null) {
            // 應用程序獲取PowerManager服務
            // PowerManager是系統服務,所以它的生命週期不是應用程序所能控制的;應用程序只能通過系統,向系統請求獲取PowerManager服務,然後系統把這個服務的應用給我們
            PowerManager pMgr = (PowerManager) ctx
                    .getSystemService(Context.POWER_SERVICE);
            mWakeLock = pMgr.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "wakeLock");
        }
        if (mWakeLock != null && !mWakeLock.isHeld()) {
            mWakeLock.acquire();
        }
    }

    /**
     * 2. 釋放常亮鎖
     *
     * @param ctx
     */
    public void releaseWakeLock(Context ctx) {
        try {
            if (mWakeLock != null && mWakeLock.isHeld()) {
                mWakeLock.release();
            }
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

2. 在Window設置flag (官方推薦)

// 這種方式不需要申請權限 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

3. 在界面佈局xml中頂層添加屬性

// 界面xml文件中的頂層佈局添加屬性即可
android:keepScreenOn="true"
參考
  1. Android讓屏幕保持常亮的三種方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章