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让屏幕保持常亮的三种方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章