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;    }        };    };

致此,就可以比较完整的实现上述需求了!


更多相关文章

  1. GitHub 标星 2.5K+!教你通过玩游戏的方式学习 VIM!
  2. Android(安卓)== 简单的binder通信
  3. 多种方式实现Android定时任务,哪一款是你的FEEL?
  4. Android通信方式篇(一)-消息机制(Java层)
  5. 总结一下各大开发板android烧写方式
  6. Android(安卓)HAL的作用及编程实例
  7. Android(安卓)数据传输方式 WIFI 蓝牙 USB
  8. android 4.4 Settings分析
  9. android studio 增加依赖

随机推荐

  1. Android的开发环境的搭建
  2. 用LinearLayout和RelativeLayout分别实现
  3. android5中数据存储方式详解
  4. 利用半透明对话框实现新浪微博android客
  5. android am命令用法
  6. 可视化操作Android的SQLite数据库
  7. android通过网络下载文字和Mp3的例子
  8. Cocos2d-x学习之创建Android工程和编译
  9. Android 快速打包项目成jar包
  10. 学习android前的环境配置,准备工作,安装and