您的位置:首页 > 移动开发

android app中如何获取电源锁保持屏幕常亮

2013-08-01 18:06 555 查看
android 中电源锁有 wakeLock 和  FLAG_KEEP_SCREEN_ON 这两种。

如果你想在你的应用中一进来就使屏幕保持常亮,并且不随系统亮度发生变化(一般应用都是你进去以后不操作它的话,系统自动灭屏时间到就自动灭屏进锁机界面了)。

方式一,使用 FLAG_KEEP_SCREEN_ON:

在进入 app 的时候添加该 flag,退出 app 的时候清除该 flag

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); //建议加在 onCreate 或者 onResume 函数中
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); //建议加在 onDestroy 或者 onPause 函数中

方式二, 使用PowerManager.WakeLock

使用这种方式,最好需要将 PowerManager.WakeLock 包装一下

privatevoid acquireWakeLock() {
if (wakeLock ==null) {
Log.d("Acquiring wake lock");
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, this.getClass().getCanonicalName());
wakeLock.acquire();
}

}

privatevoid releaseWakeLock() {
if (wakeLock !=null&& wakeLock.isHeld()) {
Log.d("Release wake lock");
wakeLock.release();
wakeLock =null;
}

}

建议 acquireWakeLock 放在 onCreate 或 onResume 函数中调用,而 releaseWakeLock 则放在 onDestroy 或者 onPause 函数中调用。

还有一种情况,假如应用程序想在进入以后两分钟内无操作自动走系统灭屏流程,那么该如何设置呢?

有了上面的基础就很容易办了。

在 onResume 或者 应用跑起来了以后执行 keepScreenOnAwhile() 函数,利用 Handler 的延时机制来处理清除消息的事件

public void keepScreenOnAwhile() {
if (LOG) {
Log.v(TAG, "keepScreenOnAwhile()");
}
mMainHandler.removeMessages(MSG_CLEAR_SCREEN_DELAY);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
mMainHandler.sendEmptyMessageDelayed(MSG_CLEAR_SCREEN_DELAY, DELAY_MSG_SCREEN_SWITCH);
}
在 Handler 的 case 中添加 MSG_CLEAR_SCREEN_DELAY 对应的处理,即清除消息标志 FLAG_KEEP_SCREEN_ON 
private Handler mMainHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
case MSG_CLEAR_SCREEN_DELAY:
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
break;
case FULLCHANGE:
setCameraState(STATE_IDLE);
break;
default:
break;
}
};
};


致此,就可以比较完整的实现上述需求了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: