zoukankan      html  css  js  c++  java
  • cocos2d-x 保持屏幕点亮及自动变灰

    很早之前遇到的问题,现在记录一下。有一家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平台运行游戏长时间不操作,导致的锁屏问题

  • 相关阅读:
    C#后台解析XML字符串并获取节点值
    table动态添加tr
    时间段检索时间段
    什么是数据结构
    PERSONAL VALUES
    C#接口
    基于ArcEngine与C#的鹰眼地图实现
    ENVI/IDL与ArcGIS集成开发的三种途径
    中国地图投影(实现Lambert投影)
    Git 的下载
  • 原文地址:https://www.cnblogs.com/meteoric_cry/p/4483156.html
Copyright © 2011-2022 走看看