HarmonyOS鸿蒙Next是否有API可以设置禁止屏幕自动休眠

HarmonyOS鸿蒙Next是否有API可以设置禁止屏幕自动休眠 APP在运行过程中,希望屏幕不自动休眠,harmony 是否有相关API提供给app来设置 禁止屏幕进入休眠。

例如Android可以通过设置
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
来实现禁止休眠和关闭禁止休眠。

请问鸿蒙上是否有相关API呢?

3 回复

两种方式

  1. 把deviceSettings.setValue里面的value值设为0,即可禁止休眠,参考文档如下: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-enterprise-devicesettings-V5#devicesettingssetvalue。但该api需要权限ohos.permission.ENTERPRISE_MANAGE_SETTINGS,仅对MDM应用开放。

  2. 可以使用setWindowKeepScreenOn实现,参考链接: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-window-V5#windowgetlastwindow9

import { BusinessError } from '@kit.BasicServicesKit';
import { window } from '@kit.ArkUI';

@Entry
@Component
struct VideoPage4 {
  @State message: string = 'Hello World';
  @State videoSrc: Resource = $rawfile('video.mp4')
  @State previewUri: Resource = $r('app.media.startIcon')
  @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X
  @State isAutoPlay: boolean = false
  @State showControls: boolean = true
  controller: VideoController = new VideoController()
  @State isKeepScreenOn: boolean = true;

  setWindowKeep() {
    try {
      let windowClass: window.Window | undefined = undefined;
      let promise = window.getLastWindow(getContext());
      promise.then((data) => {
        windowClass = data;
        windowClass.setWindowKeepScreenOn(this.isKeepScreenOn, (err: BusinessError) => {
          const errCode: number = err.code;
          if (errCode) {
            console.error(`Failed to set the screen to be always on. Cause code: ${err.code}, message: ${err.message}`);
            return;
          }
          console.info('Succeeded in setting the screen to be always on.');
        });
      })
    } catch (exception) {
      console.error(`Failed to set the screen to be always on. Cause code: ${exception.code}, message: ${exception.message}`);
    }
  }

  build() {
    Column(){
      Video({
        src: this.videoSrc,
        previewUri: this.previewUri,
        currentProgressRate: this.curRate,
        controller: this.controller
      })
        .width('100%')
        .height(600)
        .autoPlay(this.isAutoPlay)
        .controls(this.showControls)
        .onStart(() => {
          console.info('onStart')
        })
        .onPause(() => {
          console.info('onPause')
        })
        .onFinish(() => {
          console.info('onFinish')
        })
        .onError(() => {
          console.info('onError')
        })
        .onStop(() => {
          console.info('onStop')
        })

      Row() {
        Button('start').onClick(() => {
          this.controller.start() // 开始播放
          this.setWindowKeep()
        }).margin(2)
        Button('pause').onClick(() => {
          this.controller.pause() // 暂停播放
        }).margin(2)
        Button('stop').onClick(() => {
          this.controller.stop() // 结束播放
        }).margin(2)
        Button('reset').onClick(() => {
          this.controller.reset() // 重置AVPlayer
        }).margin(2)
        Button('setTime').onClick(() => {
          this.controller.setCurrentTime(10, SeekMode.Accurate) // 精准跳转到视频的10s位置
        }).margin(2)
      }

    }
  }
}

更多关于HarmonyOS鸿蒙Next是否有API可以设置禁止屏幕自动休眠的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS鸿蒙Next提供了API来控制屏幕的自动休眠行为。你可以使用PowerManager类中的wakeLock机制来保持屏幕常亮。具体来说,可以通过PowerManagernewWakeLock方法创建一个WakeLock对象,并设置PowerManager.SCREEN_BRIGHT_WAKE_LOCK标志来保持屏幕亮起。需要注意的是,使用WakeLock时需要申请相应的权限,并且在不需要时及时释放WakeLock以避免不必要的电量消耗。

在HarmonyOS鸿蒙Next中,可以通过PowerManager类的preventSleep()方法来设置禁止屏幕自动休眠。使用该API时,需要在应用的配置文件中声明ohos.permission.KEEP_SCREEN_ON权限。示例代码如下:

PowerManager powerManager = (PowerManager) getContext().getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "MyApp:MyWakeLockTag");
wakeLock.acquire();

记得在不再需要时调用wakeLock.release()以节省电量。

回到顶部