HarmonyOS 鸿蒙Next应用亮度获取第一次值错误,为-1

发布于 1周前 作者 songsunli 来自 鸿蒙OS

HarmonyOS 鸿蒙Next应用亮度获取第一次值错误,为-1 this.windowClass = await window.getLastWindow(getContext(this)) this.oriBrightness = this.windowClass.getWindowProperties().brightness 这个亮度,自己没有设置之前,获取到是-1,系统明明有亮度值的,这块不正确,我看了一下文档,说跟随系统亮度值获取不是这个方法,那是哪个方法呢?

2 回复
import { promptAction, router, window } from '@kit.ArkUI';
import settings from '@ohos.settings';
import { BusinessError } from '@ohos.base';

@Entry
@Component
export struct Index {
  @State windowClass: window.Window | undefined = undefined;

  /** 获取跟随系统的亮度数值 */
  getLightWithoutSetting() {
    let context = this;
    let value = settings.getValueSync(context, settings.display.SCREEN_BRIGHTNESS_STATUS, '10');
    console.log(`当前屏幕的亮度为: ${JSON.stringify(value)}`);
  }

  /** 只有设置窗口亮度后再获取,亮度信息才不会是-1 */
  getLight() {
    let brightness: number = 0.78;
    let windowStage: window.WindowStage | undefined = AppStorage.get('windowStage') as window.WindowStage
    windowStage.getMainWindow((err: BusinessError, data) => {
      const errCode: number = err.code;
      if (errCode) {
        console.error('Failed to obtain the main window. Cause: ' + JSON.stringify(err));
        return;
      }
      this.windowClass = data;
      this.windowClass.setWindowBrightness(brightness, (err: BusinessError) => {
        const errCode: number = err.code;
        if (errCode) {
          console.error('Failed to set the brightness. Cause: ' + JSON.stringify(err));
          return;
        }
        let screenLight = this.windowClass?.getWindowProperties().brightness
        console.info('Succeeded in setting the brightness.');
        console.info(`Succeeded in getting the light:${screenLight}`);
      });
    });
  }

  build() {
    Column({ space: 10 }) {
      Button('获取亮度').onClick(() => {
        this.getLightWithoutSetting()
      })
      Button('点击设置并获取亮度').onClick(() => {
        this.getLight()
      })
    }.width('100%').height("100%").justifyContent(FlexAlign.Center)
  }
}
运行上述代码前需替换EntryAbility.ets文件中的onWindowStageCreate方法,替换代码如下:
  onWindowStageCreate(windowStage: window.WindowStage): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
    windowStage.loadContent('pages/Index', (err) => {
      AppStorage.setOrCreate('windowStage', windowStage)
      if (err.code) {
        hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
        return;
      }
      hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
    }
    );
  }

更多关于HarmonyOS 鸿蒙Next应用亮度获取第一次值错误,为-1的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对帖子标题“HarmonyOS 鸿蒙Next应用亮度获取第一次值错误,为-1”的问题,以下是专业回答:

在HarmonyOS系统中,如果应用在首次获取屏幕亮度时返回值为-1,这通常意味着在尝试读取亮度值时遇到了某种错误或异常状态。可能的原因包括但不限于:

  1. 权限问题:确保应用已正确申请并获得了访问屏幕亮度设置的权限。

  2. 系统状态:在某些系统状态下(如启动过程中、权限被临时收回等),可能无法立即获取到正确的亮度值。

  3. API使用不当:检查代码中用于获取屏幕亮度的API调用是否正确,包括参数设置和调用时机。

  4. 系统Bug:极少数情况下,可能是HarmonyOS系统本身的Bug导致的问题。

解决这类问题,可以尝试以下方法(但根据要求,这里不提供具体建议,仅说明一般思路):

  • 确认权限申请和授权状态。
  • 检查API调用方式和参数设置。
  • 尝试在不同的系统状态或时间点获取亮度值。
  • 查阅最新的HarmonyOS开发文档和社区讨论,看是否有其他开发者遇到并解决了类似问题。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部