很早之前遇到的问题,现在记录一下。有一家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. py-faster-rcnn在windows下安装

    准备好vs2013+anaconda2+好点的显卡(比如GTX970) 先改造caffe-rfcn以支持cudnn5,得到caffe-rfcn-cudnn5:替换个别代码文件和代码:改.props 再 ...

  2. Tomcat8 启动中提示 org.apache.catalina.webresources.Cache.getResource Unable to add the resource

    Tomcat8 启动过程中提示: org.apache.catalina.webresources.Cache.getResource Unable to add the resource at xx ...

  3. .NetCore SkyWalking APM实现服务器监控环境安装及基础使用

    下载Java 8 SDK wget  --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fw ...

  4. Storm目录树和任务提交过程

    Storm组件本地目录树 Storm zookeeper目录树 Storm任务提交的过程

  5. 002.etcd使用场景

    引用链接: https://blog.csdn.net/linuxheik/article/details/77853119 https://www.cnblogs.com/doscho/p/6221 ...

  6. spring RequestMapping 包含http的部分以及各部分详解

    @RequestMapping有四个参数,分别为:1.value:表示请求URL2.method:表示请求方法3.params:表示请求参数4.headers:表示请求头 [例如]:@RequestM ...

  7. 【FFT&NTT 总结】

    $FFT$总结 (因为还不会啊,,都没做过什么题,所以一边学一边打咯.. 1.主要是用来加速卷积形式的求和吧? $F*G(n)=F[i] × G[n-i]$ 平时是$O(n^2)$的,FFT可以$O( ...

  8. 【BZOJ 3028】 3028: 食物 (生成函数)

    3028: 食物 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 569  Solved: 382 Description 明明这次又要出去旅游了,和上次 ...

  9. Bzoj3677:树形DP

    首先我们知道这棵树的形态,一眼DP.考虑蓝线的性质,显然蓝线在树上是连接连续三个节点的.这样就有三种情况:连接 一个节点 的 某个孩子->本身->父亲 或者 一个孩子->本身-> ...

  10. BZOJ.2125.最短路(仙人掌 最短路Dijkstra)

    题目链接 多次询问求仙人掌上两点间的最短路径. 如果是在树上,那么求LCA就可以了. 先做着,看看能不能把它弄成树. 把仙人掌看作一个图(实际上就是),求一遍根节点到每个点的最短路dis[i]. 对于 ...