- 博客(114)
- 收藏
- 关注
原创 鸿蒙开发实践——基于@ohos/crypto-js实现加解密工具箱
调用CryptoJS.algo.DES.createDecryptor接口,配置密钥、模式、填充、偏移量创建DES解密算法对象,调用process方法传入分段密文WordArray对象生成分段明文WordArray对象,通过数组克隆与拼接操作生成完整明文,并转为utf8格式显示。调用CryptoJS.algo.SHA3.create接口并配置输出长度创建Hasher对象,通过update方法传入多段明文,通过finalize方法生成密文。调用CryptoJS.SHA3接口,传入明文与输出长度,生成密文。
2025-06-27 20:36:03
833
原创 鸿蒙开发实践——基于connection的网络连接管理能力
网络连接管理提供管理网络一些基础能力,包括获取默认激活的数据网络、获取所有激活数据网络列表、开启关闭飞行模式、获取网络能力信息等功能。:应用侧需要知道用户当前连接网络状态并作对应的业务处理,如网络断开返回弹框提示、应用中是否按缓存数据展示图片等。应用侧需要知道用户当前连接网络状态并作对应的业务处理,如网络断开返回弹框提示、应用中是否按缓存数据展示图片等。:获取当前连接网卡链路地址、DNS地址等信息判断处理用户连接网络位置等应用侧能力。关注小编,不定期分享技术知识。同时请期待后续文章ing🚀。
2025-06-27 19:32:25
263
原创 鸿蒙开发实践——基于CameraKit,通过avrecorder进行录像
总体可分为:1、相机输入,2、同时输出预览流+录像流1、通过cameraInputt,获取相机采集数据,创建相机输入2、创建previewOutput,获取预览输出流,通过xcomponent的surfaceid连接,送显xcomponent3、通过AVrecorder的surfaceid创建录像输出流VideoOutput输出到文件中。
2025-06-27 15:48:30
245
原创 鸿蒙开发实践——基于Web组件的H5页面切换类点击操作响应时延问题分析思路&案例
应用或元服务内点击操作响应时延应 ≤ X时间起点:点击离手;时间终点:界面发生变化。S标A标B标100ms150ms250ms自研应用、三方应用、底线S标(误差5%以内)响应起点:手指点击抬手离开屏幕响应终点:肉眼看到屏幕变化的第一帧响应时延:两处时间差值。
2025-06-25 19:36:24
864
原创 鸿蒙开发实践——Fabric 自定义组件开发
ButtonViewNode对应具体的 鸿蒙 原生组件节点,它作为成员被组件实例持有,当设置属性或处理指令的时候,ButtonViewComponentInstance会调用ButtonViewNode上实现的具体方法,以ButtonView在RN侧暴露的buttonText属性为例,在JS侧设置或更新属性的时候,框架会调用ButtonViewComponentInstance上的onPropsChanged方法,这个方法中会去调用ButtonViewNode上的setLabel方法去设置资源。
2025-06-25 17:28:02
781
原创 鸿蒙面试必会:UIAbility组件生命周期分析,鸿蒙Ability的分类
当用户打开、切换和返回到对应应用时,应用中的 UIAbility 实例会在其生命周期的不同状态之间转换。UIAbility类提供了一系列回调,通过这些回调可以知道当前UIAbility实例的某个状态发生改变,会经过UIAbility实例的创建和销毁,或者UIAbility实例发生了前后台的状态切换。UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态,如下图所示。UIAbility生命周期状态。
2025-06-24 20:44:19
556
原创 鸿蒙开发实践——常见预置应用的跳转方式
通过Picker访问相关文件,将拉起对应的应用,引导用户完成界面操作,接口本身无需申请权限。拍照是相机的最重要功能之一,拍照模块基于相机复杂的逻辑,为了保证用户拍出的照片质量,在中间步骤可以设置分辨率、闪光灯、焦距、照片质量及旋转角度等信息。三方应用实际使用过程中,可能需要跳转到系统的预置应用进行一系列的操作,本文档提供了跳转各个预置应用的方法以及配置的参数。引导用户跳转到系统设置页进行权限,通知的相关设置,类似应用中常见的应用内跳转到设置进行通知开启或权限设置的操作。
2025-06-24 19:14:13
784
原创 鸿蒙开发实践——同页面内抛滑操作响应时延问题分析思路&案例
a.应用或元服务内滑动操作响应时延应 ≤ Xb.时间起点:手指滑动;时间终点:界面发生变化。c.滑动速度:大于300ms/s;滑动次数:每次半屏,连续3次S标A标B标80ms120ms180ms抛滑操作响应时延:应用页面内手指开始滑动,到页面发生变化的时间。
2025-06-24 17:02:36
558
原创 鸿蒙开发实践——滑动页面占位符加载完成时延问题分析思路&案例
滑动页面占位符加载完成时延的S标为40ms。数帧工具:Avidemux 2.6 - 32 bits (32-bit)通过视频抓取滑动停止为起始点:通过视频抓取占位符加载完成为终止点:根据终止点事件减去起始点事件计算完成时延:5161-4671 = 490ms占位符Image组件加载完成需要通过UI渲染,优化滑动过程中UI组件渲染效率可提高占位符加载完成效率。在UI显示阶段,动画是影响响应时延类的重要因素。写在最后如果你觉得这篇内容让你有所收获,我想请你帮我三个小忙~关注小编,不定期分享技术知识。
2025-06-23 21:01:13
977
原创 鸿蒙开发实践——基于ArkUI页面切换类点击操作完成时延问题分析思路&案例
应用或元服务内点击操作完成时延s标为900ms,允许误差范围5%。通过Avidemux工具查看视频来确定点击完成时延起点和终点,然后计算出整个耗时的时间,计算出来的这个时间在后面分析trace的时候会用到。
2025-06-23 18:00:40
844
原创 鸿蒙开发实践——基于@ohos.data.unifiedDataChannel实现数据共享
本模块为统一数据管理框架(Unified Data Management Framework,UDMF)的组成部分,针对多对多跨应用数据共享的不同业务场景提供了标准化的数据通路,提供了标准化的数据接入与读取接口。同时对文本、图片等数据类型提供了标准化定义,方便不同应用间进行数据交互,减少数据类型适配的工作量。1、考虑到会存在一台手机同时安装多个app的场景,需要有同一个用户账号登录信息。2、期望公司内部的应用可以使用同一个唯一标识符用于识别同一用户。同一公司不同App间的账号共享。
2025-06-22 21:02:30
399
原创 鸿蒙开发实践——基于关系型数据库的数据
使用全文检索时,创建FTS表需要使用CREATE VIRTUAL TABLE语句,执行全文搜索需要使用MATCH关键字,当前HarmonyOS关系型数据库并没有直接提供相关接口,但是数据库底层是支持的,因此可以通过executeSql、querySql执行相关SQL语句。在数据库的使用过程中,数据库可能会因为数据丢失、数据损坏、脏数据等而不可用情况,为了预防这种情况,可以通过backup接口,提前备份数据库数据到本地文件中,当发生意外后,可以通过restore接口,从指定的数据库备份文件恢复数据库。
2025-06-22 20:15:45
576
原创 鸿蒙开发实践——基于webview的Picker拉起
调用web的onShowFileSelector事件响应用户在h5侧写入的“选择文件”按钮,并使用文件选择器对象DocumentViewPicker的select方法,通过选择模式拉起documentPicker界面选择文件。调用web的onShowFileSelector事件响应用户在h5侧写入的“选择文件”按钮,并使用图库选择器对象PhotoViewPicker的select方法,通过选择模式拉起photoPicker界面选择图片。在web页面实现picker拉起文件管理器。
2025-06-22 19:28:21
139
原创 鸿蒙开发实践——基于原生能力的横竖屏旋转适配
我们如何通过传感器自己感知方向,自己设置旋转;(使用sensor感知设备是不关心设备是否启用系统自带的旋转锁定):在一个应用内,不同的页面有不同的旋转策略;如:首页仅竖屏,详情页面允许横竖屏切换;
2025-06-21 22:24:04
675
原创 鸿蒙开发实践——基于AVCodecKit的音视频解码及二次处理播放
首先导入选择器picker模块,使用PhotoViewPicker方法拉起图库选择视频文件,将视频文件传递到native侧使用Demuxer解封装器进行解封装,再使用OH_VideoDecoder进行解码(surface模式)送显播放。:使用OH_VideoDecoder接口将视频数据解码,结合Xcomponent送显播放。OH_VideoDecoder:视频解码,将视频数据解码后送显播放。Demuxer:音视频解封装,用于获取视频等媒体帧数据。Step3:开始解封装,循环获取视频帧数据。
2025-06-21 21:00:22
230
原创 鸿蒙开发实践——基于AudioRenderer音频播放
AudioRenderer是音频渲染器,用于播放PCM(Pulse Code Modulation)音频数据,相比AVPlayer而言,可以在输入前添加数据预处理,更适合有音频开发经验的开发者,以实现更灵活的播放功能。使用AudioRenderer播放音频涉及到AudioRenderer实例的创建、音频渲染参数的配置、渲染的开始与停止、资源的释放等。应用可以在输入前添加数据预处理,如设定音频文件的采样率、位宽等,要求开发者具备音频处理的基础知识,适用于更专业、更多样化的媒体播放应用开发。
2025-06-21 20:18:56
469
原创 鸿蒙开发实践——基于napi_load_module_with_info实现的napi调用arkts的接口
参数说明env当前的虚拟机环境path加载的文件路径或者模块名bundleName/moduleName的路径拼接result加载的模块。
2025-06-20 21:39:31
718
原创 鸿蒙开发实践——基于Drawing的图形/文字绘制及双缓冲模拟实现刷新
Native Drawing 模块提供了一系列的接口用于基本图形和字体的绘制。Drawing绘制的内容无法直接在屏幕上显示,需要借用 XComponent 以及 Native Window 的能力支持,将绘制的内容通过Native Window送显。这里介绍如何使用Drawing绘制内容,然后通过NativeWindow贴图到XComponent的双缓冲实现。在内存中创建一片内存区域,把将要绘制的图片预先绘制到内存中,在绘制显示的时候直接获取缓冲区的图片进行绘制。
2025-06-20 21:02:19
790
原创 鸿蒙开发实践——基于C++能力的资源访问
根据应用沙箱目录的 规范 ,在Native C++侧定义完整的沙箱路径。如:/data/app/el2/100/base/{包名}/haps/entry/files/test.txt。在ApplicationContext对象中获取应用沙箱路径,传递应用沙箱路径到Native C++侧。参考场景一的使用C++标准的文件接口打开文件,path传入对应文件所在的沙箱路径。:c++访问应用包里的文件/图片资源 rawfile和resource。:c++访问沙箱文件/图片等资源。方式一:通过arkts侧传递。
2025-06-20 20:28:34
234
原创 鸿蒙开发实践——对各种图片编解码格式的支持
拷贝动态库到\entry\libs\${OHOS_ARCH}\目录: 动态库需要在\entry\libs\${OHOS_ARCH}\目录,才能集成到hap包中,所以需要将对应的so文件拷贝到对应CPU架构的目录。在IDE的cpp目录下新增thirdparty目录,将编译生成的库拷贝到该目录下,如下图所示。在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库和头文件。三方库的测试使用原库自带的测试用例来做测试, 准备三方库测试环境。三方库头文件及生成的库。
2025-06-20 19:57:49
283
原创 鸿蒙开发实践——基于自定义注解和代码生成实现路由框架
在应用开发中无论是出于工程组织效率还是开发体验的考虑,开发者都需要对项目进行模块间解耦,此时需要构建一套用于模块间组件跳转、数据通信的路由框架。修改loginModule模块的hvigorfile.ts文件(loginModule/hvigorfile.ts),加载插件。在entry中的build-profile.json5中配置动态import。在entry中的EntryAbility.onCreate中初始化路由组件。通过扫描自定义组件的ets文件,解析语法树,拿到注解里定义的路由信息。
2025-06-20 15:06:33
491
原创 鸿蒙开发实践——基于原生能力的深色模式适配
不通过两套图片资源的方式,也可以实现深浅色模式适配(补充:通过两套图片资源的方式也可以实现,修改svg图片中fill属性的颜色,然后将两张图片分别放置在不同的目录下)值得一提的是,barContentColor并不支持使用$r的方式加载颜色资源的key值,它是一个string类型的,因此,这里的是不是暗夜模式就要开发者自己去写代码判断。采用资源限定词目录的方式,自定义两套资源(resources/dark/media和resources/base/media),通过$r的方式加载颜色资源的key值。
2025-06-19 21:37:00
626
原创 鸿蒙开发实践——基于C++能力的资源访问
根据应用沙箱目录的 规范 ,在Native C++侧定义完整的沙箱路径。如:/data/app/el2/100/base/{包名}/haps/entry/files/test.txt。在ApplicationContext对象中获取应用沙箱路径,传递应用沙箱路径到Native C++侧。参考场景一的使用C++标准的文件接口打开文件,path传入对应文件所在的沙箱路径。:c++访问应用包里的文件/图片资源 rawfile和resource。:c++访问沙箱文件/图片等资源。方式一:通过arkts侧传递。
2025-06-19 20:42:31
773
原创 鸿蒙开发实践——对各种图片编解码格式的支持
拷贝动态库到\entry\libs\${OHOS_ARCH}\目录: 动态库需要在\entry\libs\${OHOS_ARCH}\目录,才能集成到hap包中,所以需要将对应的so文件拷贝到对应CPU架构的目录。在IDE的cpp目录下新增thirdparty目录,将编译生成的库拷贝到该目录下,如下图所示。在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库和头文件。三方库的测试使用原库自带的测试用例来做测试, 准备三方库测试环境。三方库头文件及生成的库。
2025-06-19 20:08:32
152
原创 鸿蒙开发实践——基于自定义注解和代码生成实现路由框架
在应用开发中无论是出于工程组织效率还是开发体验的考虑,开发者都需要对项目进行模块间解耦,此时需要构建一套用于模块间组件跳转、数据通信的路由框架。Har中的rawfile文件在Hap编译时会打包在Hap中,通过这一机制来实现路由表的合并。在entry中的EntryAbility.onCreate中初始化路由组件。在编译期通过扫描并解析ets文件中的自定义注解来生成路由表和组件注册类。通过扫描自定义组件的ets文件,解析语法树,拿到注解里定义的路由信息。自定义组件通过wrapBuilder封装来实现动态获取。
2025-06-19 19:26:18
901
原创 鸿蒙开发实践——基于ArkUI的验证码实现
基于自定义键盘的验证码实现,进入页面后直接输入验证码,第一个验证码输入完后可自动跳到下一个,拉起的键盘是自定义数字键盘,验证码的输入框带选中效果。基于自定义键盘的验证码实现,进入页面后直接输入验证码,第一个验证码输入完后可自动跳到下一个,拉起的键盘是自定义数字键盘,验证码的输入框带选中效果。:基于系统键盘的验证码实现,进入页面后直接输入验证码,第一个验证码输入完后可自动跳到下一个,验证码的输入框带选中效果。2.通过输入法框架拉起系统键盘,对系统键盘进行监听,即可做到输入和删除的效果。
2025-06-19 15:32:12
253
原创 鸿蒙开发实践——跨语言的复杂参数类型传递
ArkTS 侧 接收 Native C++ 侧返回的 Array,通过 napi_create_arraybuffer 创建一个 arraybuffer 数组,根据创建的 arraybuffer 通过 napi_create_typedarray 创建一个 typedarray 并将 arraybuffer 存入 output_array,然后给 arraybuffer 赋值,最后返回 output_array。获取ArkTS侧传来的文件路径,处理完后返回pixelmap给ArkTS侧。
2025-06-18 20:37:48
813
原创 鸿蒙开发实践——基于RichEditor的评论编辑
RichEditor是支持图文混排和文本交互式编辑的组件,在我们使用的APP中是很常见的,比如评论区编辑内容发布、对话框或者聊天室。下面列举一些遇到的场景需求:场景一:基于文字图片以及@信息的好友评论场景二:右下角的剩余字数场景三:评论中携带所@的用户的附属信息场景四:文本选择区域发生变化或编辑状态下光标位置发生变化回调场景五:自由切换系统键盘和自定义键盘。2、在常见的评论区艾特好友时,会将“@华为官方客服”视作一个整体,光标无法插入其中,且第一次按删除键时整体会高亮选中,第二次再按删除键才会删除。
2025-06-18 20:07:17
300
原创 鸿蒙开发实践——基于HAR的跨模块C++头文件引用
多个模块使用同一份C++代码是App开发中很常见的问题,比如多个模块使用同一个自研的加解密库、集成三方开源SO库暴露其中的C++代码等。注意事项:双冒号前面指的是srcHar/oh-package.json5配置中的name,双冒号后面跟着的是步骤2中srcHar中对外导出的的so库名称,名称必须要一致。2、在srcHar模块的build-profile.json5中配置C++头文件的目录。5、在desHar的cpp源码中使用 srcHar提供的C++方法。场景:模块A引用模块B的C++接口。
2025-06-18 17:54:46
250
原创 鸿蒙开发实践——基于webView的嵌套滚动
实现方法:通过web组件的type属性设置为1,即全量展开且嵌套滚动场景,并且layoutMode接口用来设置web页面是否全量展开,如需全量展开则设置参数为WebLayoutMode.FIT_CONTENT,nestedScroll接口用来设置web组件与上下层组件的嵌套滚动关系,推荐使用子组件优先模式(NestedScrollMode.SELF_FIRST)。自身和父组件同时滚动,自身和父组件都到达边缘以后,如果自身有边缘效果,则自身触发边缘效果,否则父组件触发边缘效果。只自身滚动,不与父组件联动。
2025-06-18 17:44:12
603
原创 鸿蒙开发实践——基于tabs实现页面布局
在页面布局过程中,Tabs可以将产品包含的所有内容进行清晰分类,一目了然地呈现应用的内容范围,方便概览与跳转场景一:tab嵌套list的吸顶效果场景二:tabbar样式自定义: 1、tabs切换、监听 2、样式自定义 3、tabbar尾端文字渐变场景三:tabContent切换动画实现思路:1、最外层为tabs组件,首页tabContent主要用的stack组件嵌套了scroll组件+导航输入框组件,其中scroll组件嵌套了tabs组件,tabs里面嵌套list组件。2、外层的滚动组件scroll主要通过
2025-06-18 16:54:06
817
原创 鸿蒙开发实践——基于bindSheet的半模态弹窗
半模态转场通过bindSheet属性为组件绑定半模态页面,在组件插入时可通过设置自定义或默认的内置高度确定半模态大小。可以通过设置height属性来实现自定义高度;也可以通过设置height属性的SheetSize枚举类型,默认是LARGE。@Entry@Component@Builder...... //半模态弹窗页面内容build() {Row() {Column() {...... //通过事件打开半模态弹窗})场景描述场景一。
2025-06-17 19:35:58
319
原创 鸿蒙开发实践——基于原生能力的跨应用跳转
支付时商户根据实际情况去判断,拉起支付应用还是h5页面。:分享场景与支付场景,需要列出多个用户可跳转的应用。显示效果:1.支付应用存在,拉起支付应用。2.。3.4.
2025-06-17 18:41:00
288
原创 鸿蒙开发实践——基于measure实现的文本测量
搜索框展示历史记录,单个子组件超过固定长度后展示省略号,固定只展示两行,超出的文字被截断,通过点击按钮展示后续文本内容。搜索框展示历史记录,单个子组件超过固定长度后展示省略号,固定只展示两行,超出的文字被截断,通过点击按钮展示后续文本内容。2、测量两行文本和全部文本的高度,当全部文本的高度超过两行文本的高度时进行展开的逻辑。:当文本的内容超过指定的行数时显示 ...展开,当所有文本展开后,最后面跟着收起。当文本的内容超过指定的行数时显示 ...展开,当所有文本展开后,最后面跟着收起。
2025-06-17 17:55:00
136
原创 鸿蒙开发实践——基于ImageKit对图片进行处理
方法四:通过资源文件的RawFileDescriptor创建ImageSource。RawFileDescriptor可以通过步骤2的方案四获取。方法二:通过文件描述符fd创建ImageSource。文件描述符可以通过步骤2的方法二获取。方法三:通过缓冲区数组创建ImageSource。缓冲区数组可以通过步骤2的方法三获取。方法一:通过沙箱路径创建ImageSource。沙箱路径可以通过步骤2的方法一获取。方法二:通过imageSource编码。设置编码输出流和编码参数。创建编码器实例对象。
2025-06-17 17:04:17
340
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人