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 的延时机制来处理清除消息的事件
致此,就可以比较完整的实现上述需求了!
如果你想在你的应用中一进来就使屏幕保持常亮,并且不随系统亮度发生变化(一般应用都是你进去以后不操作它的话,系统自动灭屏时间到就自动灭屏进锁机界面了)。
方式一,使用 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; } }; };
致此,就可以比较完整的实现上述需求了!
相关文章推荐
- 如何获取屏幕长宽 android
- JAVA Eclipse开发Android如何让屏幕保持为竖直或水平状态
- Android如何获取APP启动时间
- Android如何保持屏幕常亮
- [Android] adb命令如何获取android手机屏幕分辨率
- android中按电源键锁屏然后解锁导致Activity调用onDestory以及如何防止锁屏 翻转屏幕也会触发的情况
- Android 如何优雅的获取屏幕的高度和宽度
- Android中如何通过代码的方式获取APP的SHA1值.
- Android如何获取屏幕的分辨
- 如何使用appium desktop 获取Android APP 控件的id
- appium简明教程(9)——如何获取android app的Activity
- Android如何获取屏幕、状态栏及标题栏的高度详解
- 电商之 Mobile 里多变活动页 与 IOS APP,Android APP 里的 活动页 如何保持同步,解决方案
- Android中如何获取手机屏幕大小
- android手机如何获取某APP的页面耗时数据(命令行方式)
- appium简明教程(9)——如何获取android app的Activity(即反编译.apk文件)
- android中按电源键锁屏然后解锁导致Activity调用onDestory以及如何防止锁屏 翻转屏幕也会触发的情况
- Android 如何正确的获取屏幕高度
- .Android如何获取屏幕的分辨率 .
- Android屏幕尺寸如何获取?