如何保持Android设备屏幕常亮?

2022-12-05 12:21:46 浏览数 (1)

背景

在做客户端UI自动化测试或者Monkey自动化测试中,使用jenkins中持续集中测试,经常会遇到因为设备原因导致执行任务失败的Case。

其中有一种场景,是因为设备屏幕锁屏导致自动化任务阻塞失败的场景。

因为,做自动化需要保障设备一直是常亮和解锁的状态,不然如果设备是锁屏状态会阻塞自动化脚本执行,会一直卡死在当前状态。

通常解决这类问题,粗暴的方式就是给手机设备设置高亮,如下图是小米手机的设置操作:

但是这种设置方式有几种缺点:

  • 长时间设备屏幕用不休眠,对手机的电池有很大消耗,因为屏幕长亮也是耗电的,长时间会导致电池鼓包等问题,极大缩短手机寿命。
  • 在华为、oppo等国产手机中没有永不休眠选项,最多只能保持30分钟。
  • 因为手机设备平时会调试或者用于功能测试,手机设备可能被人工锁屏。

综上几个问题,依赖手机设置中屏幕常亮,无法彻底解决问题。

解决思路

解决思路主要是通过有两种方式:

1、使用adb命令亮屏

代码语言:javascript复制
点亮屏幕—>解锁屏幕

点亮屏幕:adb shell input keyevent KEYCODE_POWER

解锁屏幕:adb shell input keyevent 82

在jenkins的shell中执行自动化脚本前执行adb命令亮屏。

代码语言:javascript复制
adb -s ${device_name} shell input keyevent KEYCODE_POWER

cd ${project_path} && sh monkey.sh -p com.zhihu.android -t ${run_time} -i ${appID} -e ${appType} -h ${appPath}

使用adb命令亮屏也有个缺点,如果执行命令后没有立即执行自动化脚本,设备屏幕又会自动锁屏。

2、使用外置插件

使用外置插件的方式,是从Android底层系统设置屏幕永不休眠,借助操作Android系统PowerManager API,具体代码如下:

使用LongLightUtils.keepScreenLongLight(this);方法设置使屏幕常亮。

代码语言:javascript复制
    /**
     * 是否使屏幕常亮
     *
     * @param activity
     */
    public static void keepScreenLongLight(Activity activity) {
        boolean isOpenLight = CommSharedUtil.getInstance(activity).getBoolean(CommSharedUtil.FLAG_IS_OPEN_LONG_LIGHT, true);
        if (isOpenLight) {
            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        } else {
            activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        }

    }

在BaseActivity中的onCreate生命周期中调用。

代码语言:javascript复制

然后,把项目编译成apk安装到手机上,执行如下命令:

代码语言:javascript复制
adb -s ${device_name} shell am start -n com.finddreams.screenlonglight/com.finddreams.screenlonglight.MainActivity

在手机设备前台打开如下页面,设备就会常驻高亮。

0 人点赞