前言
OpenHarmony源码版本:4.0release
开发板:DAYU / rk3568
一、通过修改系统源码实现不息屏
修改目录:base/powermgr/power_manager/services/native/profile/power_mode_config.xml
通过文件中的提示可以知道DisplayOffTime表示息屏的,因此只需要修改DisplayOffTime 对应的id:101即可。
value取值 -1 表示不设置,如DisplayOffTime设为 -1 表示不息屏
例:<switch id="101" value="-1" recover_flag="0"/> 表示不息屏
<!--
Power Mode Definitions: // 电源模式定义
MODE_NORMAL = 600, // 正常模式
MODE_POWER_SAVE = 601, // 省电模式
MODE_PERFORMANCE = 602, // 性能优先
MODE_EXTREME_POWER_SAVE = 603, // 超级省电
-->
<!--
Action Definitions: // 行为定义
DisplayOffTime = 101, // 息屏时间控制
SystemAutoSleepTime = 102, // 系统自动睡眠时间控制
AutoAdjustBrightness = 103, // 亮度自动调整时间控制
AutoWindowRotation = 107, // 窗口自动旋转时间控制
SystemBrightness = 115, // 系统亮度调节
VibratorsState = 120, // 马达(震动)状态
-->
<switch_proxy version="1">
<proxy id="600">
<switch id="101" value="-1" recover_flag="0"/>
<switch id="102" value="0" recover_flag="0"/>
<switch id="103" value="-1" recover_flag="0"/>
<switch id="107" value="1" recover_flag="0"/>
<switch id="115" value="102" recover_flag="0"/>
<switch id="120" value="1" recover_flag="0"/>
</proxy>
<proxy id="601">
<switch id="101" value="-1" recover_flag="0"/>
<switch id="102" value="5000" recover_flag="0"/>
<switch id="103" value="-1" recover_flag="0"/>
<switch id="107" value="-1" recover_flag="0"/>
<switch id="115" value="50" recover_flag="0"/>
<switch id="120" value="-1" recover_flag="0"/>
</proxy>
<proxy id="602">
<switch id="101" value="-1" recover_flag="0"/>
<switch id="102" value="-1" recover_flag="0"/>
<switch id="103" value="-1" recover_flag="0"/>
<switch id="107" value="1" recover_flag="0"/>
<switch id="115" value="255" recover_flag="0"/>
<switch id="120" value="1" recover_flag="0"/>
</proxy>
<proxy id="603">
<switch id="101" value="-1" recover_flag="0"/>
<switch id="102" value="1000" recover_flag="0"/>
<switch id="103" value="-1" recover_flag="0"/>
<switch id="107" value="-1" recover_flag="0"/>
<switch id="115" value="25" recover_flag="0"/>
<switch id="120" value="-1" recover_flag="0"/>
</proxy>
</switch_proxy>
二、通过修改电源模式实现不息屏
通过上一步我们查看power_mode_config.xml 我们知道,当模式为性能优先即id=602时,DisplayOffTime=1 的value值 系统默认为-1,所以可以通过hdc指令进行修改
1、执行hdc shell命令
hdc shell power-shell setmode 602
2、执行成功后,会打印出
Set Mode: 602
Set Mode Success!
不过这个修改电源模式的结果不保存,会在系统重启后恢复默认的正常模式,需要再次执行 power-shell 命令进行设置
三、通过hdc 推送电源配置到开发板
首先本地复制一份 power_mode_config.xml 文件,将电源管理中的 101 项的value值改为 -1, 保存备用
1、获取读写权限
hdc shell "mount -o remount,rw /"
2、将修改保存的power_mode_config.xml文件推送到开发板
hdc file send power_mode_config.xml /vendor/etc/power_config/
3、重启
hdc shell reboot
通过hdc推送 power_mode_config.xml 文件到开发板中这种方式,只要不重新烧录开发板的vendor分区,即使开关机开发板,效果都是持续的。
如果执行第2步报以下错误:Error opening file: illegal operation on a directory, path:/vendor/etc/power_config/
说明可能不存在power_config文件夹,需要执行hdc shell 进入,cd /vendor/etc/ ,执行mount -o rw,remount /vendor, 执行mkdir power_config 创建文件夹,执行exit退出,然后再重新执行第2步。
如果执行第2步报以下错误:Error opening file: read-only file system, path:/vendor/etc/power_config//power_mode_config.xml
说明没有挂载,需要执行hdc shell进入,执行mount -o rw,remount /vendor ,再执行exit退出后,然后再重新执行第2步
四、通过代码实现当前应用不息屏
这种方式不同于上面说到的几种方式,这种方式仅针对当前应用
private async keepScreenOn(status) {
let context = getContext(this) as common.BaseContext
let windowClass = await window.getLastWindow(context) //获取窗口实例
let isScreenOn = await windowClass.getWindowProperties().isKeepScreenOn //查看屏幕常亮状态
if (!isScreenOn) {
await windowClass.setWindowKeepScreenOn(status) //设置窗口常亮或取消
}
console.info("屏幕常亮状态: " + isScreenOn)
}
在应用的onPageShow方法执行keepScreenOn(true),在onPageHide方法执行keepScreenOn(false)