基于鸿蒙API10的RTSP播放器(七:亮度调节功能测试)

目标:
当我的手指在设备左方进行上下移动的时候,可以进行屏幕亮度的调节,在调节的同时,有实时的调节进度条显示

步骤:

  1. 界面逻辑:使用Stack() 组件,完成音量图标和进度条的组合显示,这里称做组合进度条✔
  2. 显示逻辑:通过给容器组件添加手势监听事件gesture() ,借助监听事件回调函数onActionStart()控制显示,借助监听事件回调函数OnAcitonEnd()来控制隐藏, 为组合进度条添加实时显示的事件。✔
  3. 更新进度条逻辑:通过监听事件回调函数OnAcitonUpdate()来实时控制进度条的值,在此回调函数中,可以获取手指触碰点在屏幕的x和y坐标,从而根据x的值确定是左边触碰还是右边触碰。✔
  4. 更新亮度值逻辑:我们在第3步已经把进度值写入,此时只要把进度值传递到底层系统函数,即可完成亮度设置。✖

方法:
这里笔者使用了两个方法,一个是使用 @system.brightness库来直接设置系统的亮度,另一个是使用@ArkUI库中的window库来设置应用主窗体的亮度。方法一亮度获取成功,设置失败。方法二,获取和设置均成功。以下是详细步骤

第4步实现方法一: 使用库 @system.brightness

  1. brightness库:在官方文档中发现使用 @system.brightness 整个库,可以设置系统亮度,但是官方文档说整个库已经停止维护,下面这段代码在IDE中有横杠。本着功能至上的想法,笔者还是使用了这个库,并且调用了这个库的亮度获取和亮度设置。✔
// 导入这个库
import brightness from '@system.brightness'//获得当前屏幕亮度值
brightness.getValue({  success: (data: BrightnessResponse) => {  console.log('success get brightness value:' + data.value);  },  fail: (data: string, code: number) => {  console.error('get brightness fail, code: ' + code + ', data: ' + JSON.stringify(data));  }  
});// 设置亮度值
brightness.setValue({  value: 120,  success: () => {  console.log('handling set brightness success.');  },  fail: (data: string, code: number) => {  console.error('handling set brightness value fail, code:' + code + ', data: ' + data);  }  
});
  1. 亮度获取函数测试效果:我们使用一个按钮分别通过点击事件调用这两个函数。红框是在进入到引入brightness库的页面后,就会自动打印,蓝框是笔者加的日志,按钮点击后打印,可以看到,这个函数可以正常获取屏幕亮度。按照官方的说法,屏幕亮度,取值范围0 ~ 255。✔在这里插入图片描述

  2. 亮度设置函数测试效果:同样的测试方法,我们再来看看打印效果,我们可以看到,设置失败。在这个函数当中有三个参数,传入value屏幕亮度值时,出错(蓝色框日志),但是回调函数执行的是成功(红色框日志) ✖在这里插入图片描述

  3. 调整参数值再试一次,这次设置不成功,但至少日志打印顺序正确了✖在这里插入图片描述

  4. 尝试添加亮度调节权限,依然失败✖在这里插入图片描述
    在这里插入图片描述

**第4步实现方法二: 使用window库获取应用主窗体进行调节✔

  1. 在EntryAbility.ets中的onWindowStageCreate方法中将WindowStage设置一个AppStorage。这里相当于设置一个全局变量,使得窗体模型WindowStage可以在我们的目标页面获取
onWindowStageCreate(windowStage: window.WindowStage): void {  // Main window is created, set main page for this ability  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');  // 重点AppStorage.setOrCreate('windowStage',windowStage);  windowStage.loadContent('pages/Index', (err) => {  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.');  });  
}
  1. 在struct结构体中设置变量✔
// 这里可以看见我们使用全局变量获取到了我们的窗体模型WindowStage
windowStage: window.WindowStage = AppStorage.get('windowStage') as window.WindowStage;  
// 获取主窗口的方式  
mainWin: window.Window = this.windowStage.getMainWindowSync();
  1. 在aboutToAppear()继续初始化✔
// 在此函数中继续初始化
aboutToAppear() {this.windowStage = AppStorage.get('windowStage') as window.WindowStage;  // 获取主窗口的方式  this.mainWin = this.windowStage.getMainWindowSync();  // 获取最上层窗口的方式  // window.getLastWindow(getContext(this));
}
  1. 在一个按钮中进行测试差,注意取值范围是01,不再是0255✔
// 在一个按钮中,可以放置如下函数Button('获取屏幕亮度')  .width('40%')  .height('50vp')  .onClick(() => {// 2.1通过window设置亮度  try {  this.mainWin.setWindowBrightness(0.5, (err) => {  if (err.code) {  console.error('Failed to set the brightness. Cause: ' + JSON.stringify(err));  return;  }  console.info('Succeeded in setting the brightness.');  });  } catch (exception) {  console.error('Failed to set the brightness. Cause: ' + JSON.stringify(exception));  }}
  1. 实际日志输出内容标志成功✔
    在这里插入图片描述

  2. 虽然设置成功,但是在模拟器中,为什么没有任何反应呢?聪明的笔者猜测鸿蒙模拟器应该不支持亮度调节,因此,笔者进行验证,发现果然是模拟器不支持亮度调节。✔

亮度拉到最低,没有任何反应:在这里插入图片描述

亮度拉到最高,没有任何反应:在这里插入图片描述

  1. 为了看到亮度调节的效果,笔者本着头铁的精神使用真机进行测试。为了前后效果明显,笔者把亮度调节到0.1,这里照片看出来差别不大,但现场看的话,还是有令人兴奋的效果。发✔

总结:
经过笔者不懈的试错,使用window库获取主窗体,即可完成亮度调节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/424214.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux echo,printf 命令

参考资料 【Linux】ハイフンをいっぱい出したかっただけなのに【printfコマンド】 目录 一. echo命令1.1 -n 选项1.2 -e 选项1.3 配合扩展实现批量换行输出1.3.1 xargs -n 11.3.2 tr \n1.3.3 xargs printf "%s\n"1.4 ANSI转义序列1.5 彩色文本输出 二. printf 命令…

C# System.BadImageFormatException问题及解决

C# System.BadImageFormatException问题 出现System.BadImageFormatException 异常有两种情况:程序目标平台不一致&引用dll文件的系统平台不一致。 异常参考 BadImageFormatException 程序目标平台不一致: 项目>属性>生成:x86 …

【吊打面试官系列-Redis面试题】使用过 Redis 做异步队列么,你是怎么用的?

大家好,我是锋哥。今天分享关于【使用过 Redis 做异步队列么,你是怎么用的?】面试题,希望对大家有帮助; 使用过 Redis 做异步队列么,你是怎么用的? 一般使用 list 结构作为队列,rpus…

【Redis】redis5种数据类型(list)

目录 基本介绍 命令 LPUSH LPUSHX RPUSH RPUSHX LRANGE LPOP RPOP LINDEX LINSERT LLEN LREM LTRIM LSET 阻塞版本的命令 BLPOP 内部编码 基本介绍 list相当于c的双端队列deque 区分获取和删除的区别 lindex能获取到元素的值lrem也能返回被删除元素的值 命…

828华为云征文 | 华为云FlexusX实例下的Kafka集群部署实践与性能优化

前言 华为云FlexusX实例,以创新的柔性算力技术,为Kafka集群部署带来前所未有的性能飞跃。其灵活的CPU与内存配比,结合智能调度与加速技术,让Kafka在高并发场景下依然游刃有余。在828华为云企业上云节期间,FlexusX实例携…

手机玩机常识____展讯芯片刷机平台ResearchDownload的一些基本常识与问题解决

展讯ResearchDownload工具 展讯芯片的刷机工具--ResearchDownload下载工具"是一款专为用户设计的高效、便捷的下载管理软件,它能够帮助用户快速、稳定地从互联网上获取各种文件。这款工具以其强大的功能和良好的用户体验,在众多展讯芯片下载工具中脱…

git-describe获取不到新创建的标签

一、问题描述 1、新建的分支 2、git-describe 失败 二、查询资料 (1)git-describe - 根据可用的ref给对象一个人类可读的名称 (2)该命令查找可从提交访问的最新标记。如果标记指向提交,则仅显示标记。否则&#xf…

S-Procedure的基本形式及使用

理论 Lemma 1. ( S- Procedure[ 34] ) : Define the quadratic func- \textbf{Lemma 1. ( S- Procedure[ 34] ) : Define the quadratic func- } Lemma 1. ( S- Procedure[ 34] ) : Define the quadratic func- tions w.r.t. x ∈ C M 1 \mathbf{x}\in\mathbb{C}^M\times1 x…

el-input设置type=‘number‘和v-model.number的区别

el-input设置typenumber’与设置.number修饰符的区别 1. 设置type‘number’ 使用el-input时想收集数字类型的数据,我们首先会想到typenumber,设置完type为number时会限制我们输入的内容只能为数字,不能为字符/汉字等非数字类型的数值&…

Leetcode面试经典150题-148.排序链表

题目比较简单,使用链表的归并排序 解法都在代码里,不懂就留言或者私信 合并链表部分没怎么加注释,时间实在是不充裕,看不懂的看一下这篇专门讲解合并链表的 Leetcode面试经典150题-21.合并两个有序链表-CSDN博客 /*** Definit…

Brave编译指南2024 Windows篇:安装Visual Studio 2022(二)

1.引言 在编译Brave浏览器之前,安装和配置合适的开发工具是至关重要的一步。Visual Studio 2022是编译Brave浏览器所需的重要开发环境,它提供了一整套工具和服务,以支持多种编程语言和技术。作为一款功能强大的集成开发环境(IDE&…

【vue-media-upload】一个好用的上传图片的组件,注意事项

一、问题 media 的saved 数组中的图片使用的是location 相对路径&#xff0c;但是我的业务需要直接根据图片链接展示图片&#xff0c;而且用的也不是location 相关源代码 <div v-for"(image, index) in savedMedia" :key"index" class"mu-image-…

测试ASP.NET Core的WebApi项目调用WebService

虚拟机中部署的匿名访问的WebService&#xff0c;支持简单的加减乘除操作。本文记录在WebApi中调用该WebService的方式。   VS2022创建WebApi项目&#xff0c;然后在解决方案资源管理器的Connected Services节点点右键&#xff0c;选择管理连接的服务菜单。 点击下图圈红处…

Anolis OS 8.8 CentOS8离线安装mysql-8.0.9

下载mysql安装包&#xff1a; mysql下载地址 在Linux系统中&#xff0c;mysql的安装包除了要区分系统和cpu架构之外&#xff0c;还区分安装方式&#xff0c;下载不同的包&#xff0c;安装方式也完全不一样&#xff0c;安装完成后的效果也完全不一样。 我之前下载的包按照官方…

QT Layout布局,隐藏其中的某些部件后,不影响原来的布局

最近在工作时&#xff0c;被要求&#xff0c;需要将布局中的某些部件隐藏后&#xff0c;但不能影响原来的布局。 现在记录解决方案&#xff01; 一、水平布局&#xff08;垂直布局一样&#xff09; ui中的布局 效果&#xff1a; 按钮可以任意隐藏&#xff0c;都不影响其中布…

CCS811二氧化碳传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理介绍 三、程序设计 main.c文件 ccs811.h文件 ccs811.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 CCS811模块是一种气体传感器&#xff0c;可以测量环境中TVOC(总挥发性有机物质)浓度和eCO2…

Redis学习——数据不一致怎么办?更新缓存失败了又怎么办?

文章目录 引言正文读写缓存的数据一致性只读缓存的数据一致性删除和修改数据不一致问题操作执行失败导致数据不一致解决办法 多线程访问导致数据不一致问题总结 总结参考信息 引言 最近面试快手的时候被问到了缓存不一致怎么解决&#xff1f;一开始还是很懵的&#xff0c;因为…

关于java同步调用多个接口并返回数据

在现代软件开发中&#xff0c;应用程序经常需要与多个远程API接口进行交互以获取数据。Java作为一种流行的编程语言&#xff0c;提供了多种方式来实现这一需求。本文将探讨如何在Java中同步调用多个API接口&#xff0c;并有效地处理和返回数据。 同步调用的必要性 在某些场景下…

音视频推流中使用wireshark进行抓包分析RTMP

一、前期工作 最近使用开发板采集音视频数据合成FLV流后进行推流到PC端&#xff08;RTMP协议&#xff09;&#xff0c;PC端需要安装对应的nginx以及支持rtmp的nginx&#xff0c;在网上找了教程后安装成功&#xff0c;现在使用wireshark工具对开发板于pc端之间的通信协议进行解析…

【安全系列--处理挖矿】

现象&#xff1a;我们云上waf提示有台服务器存在挖矿行为 解决思路&#xff1a; 1、查看服务器的进程情况 top发现服务的CPU使用率非常高 2、使用性能分析工具perf查看占用的cpu进程 sudo apt install linux-tools-common发现一些kernel进程存在异常 3、使用find查一下这…