很早之前遇到的问题,现在记录一下。有一家Android渠道(抱歉,时间太长了已经记不大清楚是哪一家了 oppo/联想/酷派?)在我们提交新版本时拒绝了,理由是:手机背光状态下,屏幕不会自动变灰。

这里为了测试,我将它改为30秒,这样做有什么影响呢?就是开启任何一个应用,在30秒之内,我如果没有任何的操作,就自动锁屏了。你可以拿你的手机试一下,比如打开微信然后放在那里不动,30之后它表现出来的的效果跟按了电源键锁屏类似。但还是有区别滴:

1)它有一个过渡阶段:屏幕由亮变暗,几秒之后屏幕才黑掉,需要通过按电源键来恢复;

2)没有解除屏幕保护的过程:当按下电源键后,屏幕重新被点亮,显示的就是上一次的界面,比如前面讲的微信的界面,而直接通过按电源键关闭屏幕的,而且你设置过屏幕保护(比如人脸解锁、图案解锁、数字密码解锁、混合密码解锁等等),再次按下电源键点亮屏幕时是先需要解除屏幕保护的;

3)没有声音:背光倒计时结束后,屏幕黑掉,没有声音,按电源键重新点亮屏幕也没有声音,而通过电源键关闭和点亮屏幕默认都是有声音的;

 

游戏存在的问题是,无论等待多长时间,屏幕一直被点亮,这样会导致一个问题:耗电会快,因为你游戏一直开在那里,CPU和屏幕都是需要手机电池供电的。要解决这个问题,先来了解一下Android中最重要的组件Activity,它的生命周期:

 

(图片来源百度经验:安卓Activity生命周期详解)

 

要解决上面说的那个问题,也就是当Activity的onResume()被调用后,需要保持屏幕始终被点亮,当onPause()被调用后,要释放屏幕始终被点亮,从而转交给系统进行默认处理。

关于Android屏幕锁定,一搜网上就有很多参考资料,我找了一些也试了很多,发现都无法满足要求,最后找到一篇关于FLAG_KEEP_SCREEN_ON的文章才解决掉,废话不多了,直接上代码:

@Override
protected void onPause(){
    //todo
   
    closeKeepScreenOn();
   
    super.onPause();
}  
@Override
protected void onResume() {
    //todo
   
    openKeepScreenOn();
 
    super.onResume();
}  
public boolean bFlagKeepScreen = true;
// 开启屏幕始终点亮
public void openKeepScreenOn()
{
    closeKeepScreenOn();
   
    if (bFlagKeepScreen)
    {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
//            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
       
        Log.i("FLAG_KEEP_SCREEN_ON", "open");
    }
} // 关闭屏幕始终点亮
public void closeKeepScreenOn()
{
    if (bFlagKeepScreen)
    {
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
       
        Log.i("FLAG_KEEP_SCREEN_ON", "close");
    }       
}

上面注释掉的代码,addFlags方法,我测试的结果是没有用,所以改用了setFlags

参考资料:

Android 屏幕锁 - FLAG_KEEP_SCREEN_ON

分享一个定时唤醒屏幕解锁键盘并提示用户的实例

Keep the screen awake throughout my activity

Cocos2dx 解决在Android平台运行游戏长时间不操作,导致的锁屏问题

cocos2d-x 保持屏幕点亮及自动变灰的更多相关文章

  1. 【WP开发】在手机屏幕点亮时播放声音

    今天说的内容有点流氓,请诸君在开发应用时谨慎使用. 那么,这活儿到底有多流氓呢? 先介绍一下要实现的功能:当用户按电源键(也可以是双击屏幕)点亮手机的屏幕时播放一下短音乐,而且应用程序可以不在前台运行 ...

  2. cocos2d-x 如何保持屏幕常亮

    转自:http://blog.csdn.net/wolfking_2009/article/details/8939027 貌似cocos2d-x没有接口直接做这个功能 而各个平台又不一样,所以只能对 ...

  3. win10 uwp 屏幕常亮

    我们在播放视频需要屏幕常亮,我们可以使用DisplayRequest,因为代码简单我直接写,代码来自https://msdn.microsoft.com/en-us/library/windows/a ...

  4. LongLightUtils【保持屏幕常亮工具类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这里只是简单记录下保持屏幕常亮工具类LongLightUtils的使用,具体请阅读参考资料<Android屏幕常亮,其实很简单 ...

  5. Xamarin Essentials教程屏幕常亮ScreenLock

    Xamarin Essentials教程屏幕常亮ScreenLock   在一段时间内,如果用户没有对设备进行操作,设备就会自动关闭屏幕.用户必须手动操作,才能点亮屏幕.但是很多应用需要在用户没有操作 ...

  6. 完美实现Android的屏幕常亮功能

    笔者所在公司做的APP是股票类的,用户在查看股票报价页面的时候,往往需要开启盯盘模式,这个时候屏幕是不能黑屏的,黑屏会导致用户看不到一些关键报价涨跌,错过了买入卖出的最佳时机,就会给用户造成损失,这是 ...

  7. Android保持屏幕常亮

    Android保持屏幕常亮,PowerManager.WakeLock的使用 package com.hebaijun.wakelock;      import android.app.Activi ...

  8. 性能优化-屏幕常亮与CPU唤醒

    Android在不使用的时候,屏幕在一段时间以后会变暗,再过一段时间就会熄屏,此时CPU就会休眠,那么在这个时候,Timer.Handler.Thread.Service等都会暂停,有时候我们需要屏幕 ...

  9. 用css3实现鼠标移进去当前亮其他变灰

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. linux文本编码格式转化 字幕处理

    在处理字幕的时候,linux的编码格式转换很烦. 步骤: 用python先判断 其编码,再用iconv 转编码,再用awk处理格式. file不能判断吗?file有时不准. 1.python判断编码 ...

  2. 搭建LDAP服务器

    1. 使用SSH 登陆服务器. 2. 更新有效的包. sudo apt-get update 3. 安装LDAP和一些其它LDAP相关的工具. sudo apt-get install slapd l ...

  3. rabbitMQ的安装(Windows下)

    在公司接触到这一块,信息中间件的使用,在公司没有时间了解的更加深入,只是在简单的使用,这里将深入学习一番. 参考:http://blog.csdn.net/lu1005287365/article/d ...

  4. Ansible专题整理

    Ansible 专题文章总览 Ansible小手册,仅供参考 文章如未明确说明实验环境,默认如下: OS:Centos 6.7 x86_64 Ansible: 2.1.2.0 Python: 2.6. ...

  5. 安装redis时候的坑

    安装redis时候的坑 随手记录一下,以此为借鉴. 1.按照需求下载redis服务 redis可视化文件 2.安装及环境搭建 修改服务里redis.windows-service.conf文件,或者r ...

  6. liunx的命令大全

  7. POJ.2454.Jersey Politics(随机化算法)

    题目链接 \(Description\) 将长为\(3n\)的序列划分成\(3\)个子序列,要求至少有两个子序列的和都\(\geq 500*n\),输出任一方案.保证有解. \(Solution\) ...

  8. Java_正确理解ThreadLocal

    首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的.各 ...

  9. js 弹窗广告24小时显示一次

    弹窗24小时显示一次 https://www.w3cschool.cn/javascript/js-cookies.html 我们需要借助cookie来实现这个功能 function setcooki ...

  10. gitblit.cmd运行自动关闭

    前几天运行gitblit.cmd一直正常,今天运行gitblit.cmd,几秒钟后命令行窗口就自动关闭了,导致无法启动gitblit服务器,查看日志如下: 刚开始以为是防火墙问题,在防火墙中添加了程序 ...