HarmonyOS 鸿蒙Next如何保持应用运行时不熄屏
HarmonyOS 鸿蒙Next如何保持应用运行时不熄屏
问题场景
在一些特殊应用场景下,例如视频播放、语音播放、地图导航期间,即使用户没有屏幕交互操作,也不希望手机跟随系统设置的休眠时间自动熄屏,而是保持屏幕常亮,直至完成或退出相关场景。
实现方案
窗口系统提供了保持指定窗口屏幕常亮的接口 windowClass.setWindowKeepScreenOn(isKeepScreenOn: boolean, callback: AsyncCallback<void>): void,windowClass表示窗口实例,第一个参数 isKeepScreenOn 表示是否保持屏幕常亮。
需要注意在恰当时机开启屏幕常亮的同时,要记得在场景中断或退出的时候关闭屏幕常亮。例如视频播放开始(包括进入视频页面自动开始播放)时,开启屏幕常亮;在视频暂停播放或页面退出时,关闭屏幕常亮。
示例代码如下:
import { BusinessError } from '@kit.BasicServicesKit';
import { window } from '@kit.ArkUI';
import { common } from '@kit.AbilityKit';
@Entry
@Component
struct PageVideo {
@State isKeepScreenOn: boolean = true
aboutToAppear(): void {
this.keepScreenOn()
}
aboutToDisappear(): void {
this.isKeepScreenOn = false
this.keepScreenOn()
}
keepScreenOn() {
// 获取窗口实例
const windowStage = (getContext() as common.UIAbilityContext).windowStage;
windowStage.getMainWindow((err: BusinessError, data) => {
const errCode: number = err.code;
if (errCode) {
console.error(`Failed to obtain the main window. Cause code: ${err.code}, message: ${err.message}`);
return;
}
const mainWindow: window.Window = data;
// 设置屏幕是否常亮
mainWindow?.setWindowKeepScreenOn(this.isKeepScreenOn, (err: BusinessError) => {
const errCode: number = err.code;
if (errCode) {
console.error('Failed to set the screen to be always on. Cause: ' + JSON.stringify(err));
return;
}
console.info('Succeeded in setting the screen to be always on.');
});
})
}
build() {
Column() {
Text(this.isKeepScreenOn ? "点击暂停,取消常亮" : "点击播放,开启常亮")
.fontSize(50)
.height(200)
.fontWeight(FontWeight.Bold)
.onClick(() => {
this.isKeepScreenOn = !this.isKeepScreenOn
this.keepScreenOn()
})
}
.height('100%')
.width('100%')
}
}
试试就知道了~
接口说明:规范使用该接口:仅在必要场景(导航、视频播放、绘画、游戏等场景)下,设置该属性为true;退出上述场景后,应当重置该属性为false;其他场景(无屏幕互动、音频播放等)下,不使用该接口;系统检测到非规范使用该接口时,可能会恢复自动灭屏功能。
在HarmonyOS鸿蒙Next系统中,若想让应用在运行时保持屏幕不熄屏,可以采取以下方法:
首先,开发者需要获取当前屏幕窗口对象,这是因为在鸿蒙系统中,窗口是操作的最小舞台,许多设置如常亮、隐私窗口等都是针对窗口进行的。
其次,通过调用setWindowKeepScreenOn
方法可以设置屏幕是否常亮。默认情况下,屏幕是不会常亮的,因此你需要将此方法的参数设置为true
来实现常亮效果。
具体的代码实现可能如下:
import { window } from '@kit.ArkUI';
let isKeepScreenOn = true;
let windowClass = window.findWindow("yourWindowName"); // 替换为实际窗口名称
windowClass.setWindowKeepScreenOn(isKeepScreenOn, (err) => {
if (err) {
console.error('Failed to set the screen to be always on.', err);
} else {
console.info('Succeeded in setting the screen to be always on.');
}
});
请注意,上述代码是示例性的,实际使用时需要根据你的应用上下文进行调整。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html