- 博客(242)
- 收藏
- 关注
原创 鸿蒙5.0实战案例:基于@ohos.pasteboard实现剪贴板功能
使用场景:安全控件会在点击粘贴按钮时给业务临时授予ohos.permission.SECURE_PASTE权限,因此使用安全控件访问剪贴板的业务不会受此次非兼容性变更的影响,暂未使用安全控件的业务也可以通过使用安全控件访问剪贴板内容。系统剪贴板支持对文本、HTML、URI、Want、PixelMap等内容的操作。使用场景:在应用A复制口令(使用按钮复制),打开应用b后直接读取到系统剪贴板里面的口令,然后跳转到口令里面的页面。在其他场景下,请应用使用粘贴控件读取剪贴板数据,使用方式参考:场景一。
2025-04-02 17:29:17
767
原创 鸿蒙5.0实战案例:事件通信能力解决方案
弹窗功能依赖UI的执行上下文,不可在UI上下文不明确的地方使用,在一些异步回调或非UI界面中调用该接口,可能会无法跟踪到当前UI的上下文,导致接口执行失败,不能正常打开弹窗。所以当使用Eventhub传递事件时需要使用 promptAction.openCustomDialog 保证拿到同一UI上下文,才能正常打开弹窗。
2025-04-02 15:30:16
913
原创 鸿蒙5.0实战案例:应用启动框架AppStartup应用场景分析
自动模式下启动框架的执行顺序在创建AbilityStage和执行AbilityStage onCreate回调之间。那启动框架内的任务执行顺序是什么样子呢?基于以下配置,进行任务时序分析。
2025-04-02 13:34:02
305
原创 鸿蒙5.0实战案例:H5通过url scheme拉起对应应用
id=xxx&funNum=xxx&type=xxx’,点击该按钮,打开网页web端收到的url为’hwtips://com.huawei.hmos.tips.app?2.在被拉起方的module.json文件中的skill字段中配置该应用支持的scheme协议,表示这个应用可以通过此协议打开,例如玩机技巧应用想被成功拉起则需要玩机技巧应用在工程的model.json5文件中配置abilities的skills中配置scheme。
2025-04-01 22:19:20
756
原创 鸿蒙5.0实战案例:基于JSVM创建引擎执行JS代码并销毁
通过createJsCore方法来创建一个新的JS基础运行时环境,并通过该方法获得一个虚拟机ID,通过evalUateJS方法使用虚拟机ID对应的运行环境来运行JS代码,在JS代码中创建promise并异步调取TS侧设定的callback函数,最后使用releaseJsCore方法来释放虚拟机ID对应的运行环境。调用的C++方法类似于NAPI的写法,通过OH_JSVM_GetCbInfo获取JS传入方法的参数,将获取到的JSVM_Value的类型转换成c的类型。关闭和销毁虚拟机和上下文环境的作用域与实例。
2025-04-01 20:20:44
803
原创 鸿蒙5.0实战案例:基于Code Linter实现代码检查
codelinter检查的结果,用户可以选择不改,又或者不想检查出来,就可以/* eslint-disable */屏蔽,但只能屏蔽有Ignore图标的。在工程根目录下创建code-linter.json5配置文件,可对于代码检查的范围及对应生效的检查规则进行配置,ruleSet和rules配置项共同确定了生效的 规则范围。在已打开的代码编辑器窗口单击右键点击Code Linter,或在工程管理窗口中鼠标选中单个或多个工程文件/目录,右键选择Code Linter执行代码检查。
2025-04-01 16:54:46
878
原创 鸿蒙5.0实战案例:基于反混淆工具混淆后的日志定位
将nameCache.json文件放入nameCache文件内,将sourceMaps.map文件放入sourceMaps文件夹中,将生成的so文件放入nativeso文件中,input文件存放ArkTS和Native堆栈报错信息文件,output文件作为输出目录。工程源码的混淆可以降低工程被破解攻击的风险,但会导致无法直接通过Release应用的堆栈信息定位到源码的具体文件和行位置,不易于开发者快速定位解决问题。c.根据电脑的操作系统,从 DP平台 上的套件货架上下载对应版本的hstack工具。
2025-04-01 15:13:47
1004
原创 鸿蒙5.0实战案例:基于HiAppEvent能力的应用崩溃监控上报
HiAppEvent的接口设计,由系统决定回调的时机。使用这种机制,可以获取的应用崩溃事件结构化日志。HiAppEvent运营&运维事件软件模块,用于连接APP开发者、APM上传模块、HiView故障维测服务。支撑应用开发者完成运营和运维的数据分析工作。措施1:开放系统事件订阅API,可以订阅到系统检测到APP相关事件,包括崩溃、卡死等。措施2:开放自定义事件API,开发者可以本地记录事件、本地记录用户属性。措施3:开放故障日志,开发者订阅系统事件后同步可获取相关故障的日志。措施4。
2025-04-01 13:23:17
785
原创 鸿蒙5.0实战案例:基于短距离通信的BLE蓝牙扫描
相关接口参考文档: @ohos.bluetooth.access (蓝牙access模块 , @ohos.bluetooth.connection (蓝牙connection模块) , @ohos.bluetooth.socket (蓝牙socket模块)。ble扫描的是低功耗蓝牙,相比于connection扫描结果偏少,如果想要扫描到系统设置中的所有设备,需要去调用@ohos.bluetooth.connection模块中的connection.startbluetoothdiscovery。
2025-03-31 22:20:21
876
原创 鸿蒙5.0实战案例:基于Grid实现混合布局
ArkUI提供了Grid容器组件和子组件GridItem,用于构建网格布局。Grid用于设置网格布局相关参数,GridItem定义子组件相关特征。
2025-03-31 20:25:07
215
原创 鸿蒙5.0实战案例:基于ArkUI实现类似Toast弹窗
使用@CustomDialog装饰器装饰自定义弹窗,在此装饰器内进行自定义内容(也就是弹框内容)、并创建构造器,与装饰器呼应相连。使用定时器,在页面的生命周期onPageShow中设置定时任务,页面显示时打开弹窗。可自定义弹窗位置,5.0规格,未设置alignment弹窗默认居中显示。可设置弹窗宽度、高度。gridCount弹窗宽度占栅格宽度的个数最大为4栅格宽度(400vp),API 12可通过width和height属性指定宽高。弹窗高度最大值:0.9 *(窗口高度 - 安全区域)
2025-03-31 20:24:01
612
原创 鸿蒙5.0实战案例:基于Refresh组件的下拉刷新
整体思路:首先需要用装饰器@builder自定义构建一个函数,然后跟refresh的接口builder进行绑定Refresh({refreshing:$$this.isRefreshing,builder:this.customRefreshComponent()}),最后将通过refresh的系列回调逐步实现下拉过程中图标的动态变化。实现页面下拉刷新距离回调以及刷新距离自定义。
2025-03-31 15:48:41
897
原创 鸿蒙5.0实战案例: 基于Text的自定义字体
A:在onCreate中注册字体时,页面还未创建,所以字体未生效,需要在页面创建完成之后再加载字体,推荐在页面注册回调windowStage.loadContent中进行字体注册。给Text组件设置fontFamily属性,fontFamily中的名字就是上面注册时设置的字体名,最后使用的emoji表情,就是从下载的三方emoji字体文件钟直接粘贴得到的。Q:在page中注册字体没问题,移到UIAbility时会偶现字体注册失败,希望提供一个稳定在UIAbility注册字体的方案。
2025-03-31 13:33:29
821
原创 鸿蒙5.0实战案例:基于ArkUI 组件嵌套的滑动
描述:外层scroll滑动,内层waterFlow滑动,外层使用嵌套属性.nestedScroll进行联动。基于nestedScroll实现WaterFlow与Scroll混合滑动。外层list组件和内层list组件基于.nestedScroll进行联动。list中嵌套List滑动。
2025-03-30 21:44:43
293
原创 鸿蒙5.0实战案例:基于promptAction全局弹窗
promptAction.openCustomDialog接口,弹窗的样式相当于customdialog设置customStyle为true时;此时弹窗的样式完全按照dialogContent中设置的样式显示,完全由开发者自己来定义。
2025-03-30 20:18:34
460
原创 鸿蒙5.0实战案例:基于Navigation的路由拦截管理
设置并开启页面路由拦截registerInterception,通过全局变量LocalStorage判断用户当前是否登录,未登录时点击购物车会被拦截并跳转至登录页,输入用户名和密码后将LocalStorage改为true表示已登录,然后跳转至购物车。设置willShow页面跳转前拦截,判断当从预约页返回时(source.pathInfo.name === ‘appointPageTwo’),会进行路由拦截并弹出确认框是否返回首页,选择确认则clear清栈返回首页。
2025-03-30 19:09:40
245
原创 鸿蒙5.0实战案例:基于OpenGL渲染视频画面帧
在napi 接口init的时候在Xcomponent的OnSurfaceCreatedCB回调中初始化渲染线程,通过OH_NativeImage_Create创建nativeImage。通过OH_NativeImage_SetOnFrameAvailableListener设置帧可用回调,通过NativeVsync接收系统信号,控制渲染。设置窗口:获取并设置属性SurfaceID,该surfaceId是native侧nativeImage的surfaceID,调用play方法开始播放。
2025-03-28 21:52:24
252
原创 鸿蒙5.0实战案例: 基于hvigor插件定制构建
HAP/HSP运行时获取编译构建参数生成BuildProfile类文件当前有以下几种方式可以生成BuildProfile类文件:选中需要编译的模块,在菜单栏选择“Build > Generate Build Profile ${moduleName}”。在菜单栏选择“Build > Build Hap(s)/APP(s) > Build Hap(s)”或“Build > Build Hap(s)/APP(s) > Build APP(s)”
2025-03-28 20:44:34
840
原创 鸿蒙5.0实战案例:基于lycium的开源c库编译与集成
lycium的使用说明:lycium的特点就是自动化编译,只需要一个./build.sh命令就可以完成编译,下面的编译例子(openssl)代码库是通过hpkbuild脚本从github或者gitee上面拉取,在hpkbuild脚本中已经默认提供了一套编译默认的配置,也可以按照需求修改。lycium其涵盖了三种构建方式,不在c仓的需要针对该库的编译方式手动编译或者手动写脚本。使用lycium交叉编译框架将已经移植过来的c库编译,以及针对某些特定库在使用交叉编译过程中会遇到的一些常见问题。
2025-03-28 17:28:19
838
原创 鸿蒙5.0实战案例:基于密钥库签名验签的用户认证
1、在使用细粒度访问控制签名验签时和使用普通的访问控制签名验签时要注意需要在创建密钥的时候设置HUKS_TAG_USER_AUTH_TYPE、HUKS_TAG_KEY_AUTH_ACCESS_TYPE、HUKS_TAG_CHALLENGE_TYPE属性,不同处在于细粒度访问控制的签名验签需要设置HUKS_TAG_KEY_AUTH_PURPOSE属性,而在使用普通的访问控制签名验签时不需要设置HUKS_TAG_KEY_AUTH_PURPOSE属性。获取到签名功能对应的属性。b. 设置的认证类型组合不支持。
2025-03-28 15:03:16
680
原创 鸿蒙5.0实战案例:基于rcp的网络请求能力
rcp模块提供HTTP数据请求功能,请求性能如接口的易用性、性能、功耗方面,对比Network Kit HTTP网络API,rcp采用面向对象和场景的设计,API使用更简单、更灵活,满足不同场景的使用需求,具备更好的扩展性和更优的性能。当根证书校验失败,请求使用自签名证书不支持/无法通过校验 或 证书过期需要重新修改证书时,希望通过rcp网络请求能力忽略证书校验。不同的系统、不同的框架使用的域名解析机制不同,用户使用域名连接系统时,需要配置使用统一解析域名作为入口处理请求。
2025-03-28 13:41:05
810
原创 鸿蒙5.0实战案例:基于原生能力获取视频缩略图
3. 获取指定时间点的缩略图:调用fetchFrameByTime(),传入具体时间,根据获取的缩略图时间点与视频帧的对应关系,可以获取到一个PixelMap对象,该对象可用于图片显示。使用 getThumbnail和AVImageGenerator接口可以实现从原始媒体资源中获取视频指定时间的缩略图。3.调用 Asset.getThumbnail接口获取视频对象的缩略图(pixelMap)。2.通过视频检索条件调用album.getAssets方法,获取视频对象。4. 间隔一秒时间获取视频缩略图。
2025-03-27 22:07:28
342
原创 鸿蒙5.0实战案例:基于@ohos/crypto-js实现加解密工具箱
ohos/crypto-js是一个根据crypto-js库移植的 鸿蒙 三方库,适配源库4.2.0版本,提供了一系列加密算法和安全工具,主要用于执行各种消息摘要计算和对称加解密操作。
2025-03-27 20:22:59
1033
原创 鸿蒙5.0实战案例:基于connection的网络连接管理能力
网络连接管理提供管理网络一些基础能力,包括获取默认激活的数据网络、获取所有激活数据网络列表、开启关闭飞行模式、获取网络能力信息等功能。调用connection模块能力,使用前需要调用register开启监听,监听结束后需要调用unregister关闭当前监听请求。应用侧需要知道用户当前连接网络状态并作对应的业务处理,如网络断开返回弹框提示、应用中是否按缓存数据展示图片等。获取当前连接网卡链路地址、DNS地址等信息判断处理用户连接网络位置等应用侧能力。1、如需要获取蜂窝网络信息,创建时需要添加关注。
2025-03-27 17:25:48
482
原创 鸿蒙5.0实战案例:基于wifiManager的网络扫描及IP地址获取
建立socket通信连接绑定本设备ip地址 / 获取本地WiFi的IP地址及特征,可参考 @ohos.wifimanager.getLinkedInfo] 方法获取当前已连接wifi的地址信息。查看附近可连接wifi网络的信号强度(rssi)、热点能力、服务集标识(ssid)等信息,开发者可自定义策略选择网络。当前暂不支持三方直接调用扫描能力,提供 wifimanager.getScanInfoList 方法获取到扫描结果。通过当前连接wifi的IP地址判断用户所属有关位置信息。
2025-03-27 15:08:01
265
原创 鸿蒙5.0实战案例:基于CameraKit,通过avrecorder进行录像
总体可分为:1、相机输入,2、同时输出预览流+录像流1、通过cameraInputt,获取相机采集数据,创建相机输入2、创建previewOutput,获取预览输出流,通过xcomponent的surfaceid连接,送显xcomponent3、通过AVrecorder的surfaceid创建录像输出流VideoOutput输出到文件中。
2025-03-27 13:30:47
721
原创 鸿蒙5.0实战案例:基于request上传下载控制
断点续传的场景,如果是因网络等问题导致的任务失败,用户可以改为使用api10后台任务设置retry属性为true,这样内部会有自动暂停,网络恢复时自动重试,内部能续传时自动续传。订阅on(‘response’)事件返回的headers中包含有header和body,可以通过解析返回的headers来进行后续处理。要实现按钮点击暂停/恢复下载,需要先将Task传入,然后调用pause()暂停/resume()恢复下载任务。requestdownload接口默认是后台任务,支持应用长时任务。
2025-03-26 21:53:13
391
原创 鸿蒙5.0实战案例:基于原生能力的压缩与解压缩能力
断点续传的场景,如果是因网络等问题导致的任务失败,用户可以改为使用api10后台任务设置retry属性为true,这样内部会有自动暂停,网络恢复时自动重试,内部能续传时自动续传。思路与压缩相同,使用inflateInit2函数初始化zlib库,然后调用inflate进行解压缩,最后调用inflateEnd结束解压。:使用request.downloadFile下载文件,传入context和DownloadConfig,开启进度回调。3)最后,返回压缩后的数据和数据大小,并使用deflateEnd函数释放。
2025-03-26 20:19:51
871
原创 鸿蒙5.0实战案例:基于AVPlayer的视频播放
AVPlayer:功能较完善的音视频播放ArkTS API,集成了流媒体和本地资源解析,媒体资源解封装,视频解码和渲染功能,适用于对媒体资源进行端到端播放的场景,可直接播放mp4、mkv等格式的视频文件。本示例就是使用avplayer进行视频播放的实现,功能包括多种方式播放视频,以及对于视频播放的控制。示例场景:AVPlayer播放视频ArkTS实现,创建AVPlayer,设置播放资源和窗口,设置播放参数,播放控制(播放/暂停/跳转),重置,销毁资源,播放完成后切换视频。
2025-03-26 17:01:13
579
原创 鸿蒙5.0实战案例:基于OHAudio的音频操作
Step2:构造录制音频流,设置音频流参数和音频回调函数。Step1:构造播放音频流,设置音频流参数和音频回调函数。native侧接口映射,native侧和JS侧方法交互。可以将普通录制和播放切换为低时延录制和低时延播放。Step3:开始录制,暂停录制,停止录制。Step4:将采集到的音频数据写入文件中。Step3:开始播放,暂停播放,停止播放。Step1:创建录制和播放构造器。Step2:读取音频文件进行渲染。引入音频库和动态链接库。Step5:释放构造器。Step4:释放构造器。
2025-03-26 15:21:58
747
原创 鸿蒙5.0实战案例:基于Asset下的高安全级别数据存储
这个主要是去获取challenge,在用户认证成功后,应当随后调用 asset.querySync 、 asset.postQuerySync。用户想查看银行卡号,应用必须请求用户身份认证(人脸、指纹、锁屏密码),校验通过后才能访问,提升了用户的安全体验。首先我们会生成一个挑战值,传入之后拉起用户认证框同时生成令牌,将挑战值和令牌传入验证通过后查询出保存的数据。2.传入挑战值challenge,拉起用户认证框,获取令牌authToken,进行用户认证;postQuery参数列表。
2025-03-26 13:35:22
630
原创 鸿蒙5.0实战案例:基于Web组件的H5页面切换类点击操作响应时延问题分析思路&案例
应用或元服务内点击操作响应时延应 ≤ X时间起点:点击离手;时间终点:界面发生变化。S标A标B标100ms150ms250ms自研应用、三方应用、底线S标(误差5%以内)响应起点:手指点击抬手离开屏幕响应终点:肉眼看到屏幕变化的第一帧响应时延:两处时间差值。
2025-03-25 22:06:01
634
原创 鸿蒙5.0实战案例:Fabric 自定义组件开发
编写MarqueeViewNativeComponent.tsx,注意,如果要使用 Codegen ,文件必须以NativeComponent命名。在文件中使用 codegenNativeComponent 创建 MarqueeView 组件,其中 MarqueeViewProps 里声明了 src 属性和 onStop 事件:和其他标准组件的创建方式一样,在组件容器内添加 MarqueeView 标签:2.编写ArkTS原生实现代码Descriptor 的功能是封装 RN 侧组件代码传递到 ArkU
2025-03-25 20:30:42
714
原创 鸿蒙5.0实战案例:常见预置应用的跳转方式
拍照是相机的最重要功能之一,拍照模块基于相机复杂的逻辑,为了保证用户拍出的照片质量,在中间步骤可以设置分辨率、闪光灯、焦距、照片质量及旋转角度等信息。三方应用实际使用过程中,可能需要跳转到系统的预置应用进行一系列的操作,本文档提供了跳转各个预置应用的方法以及配置的参数。引导用户跳转到系统设置页进行权限,通知的相关设置,类似应用中常见的应用内跳转到设置进行通知开启或权限设置的操作。CALL_STATE_UNKNOWN 代表无效状态,当获取呼叫状态失败时返回,返回的state为-1。
2025-03-25 15:22:45
990
原创 鸿蒙5.0实战案例:基于WaterFlow的页面滑动加载
可通过Item和分组分组信息中itemsCount设置指定Item的布局,例如Item=5,第一个分组中itemsCount: 4,Item=5为第二个分组的第二个Item(此处Item从0开始)。3、设置瀑布流的onWillScroll事件回调,监听瀑布流的滚动,吸顶部分基于瀑布流滚动后的偏移量设置位置,让吸顶部分跟随瀑布流一起滚动。在瀑布流分组中为要吸顶的部分预留出位置,监听瀑布流滚动事件,吸顶部分基于瀑布流滚动后的偏移量设置位置,让吸顶部分跟随瀑布流一起滚动,吸顶部分到顶后固定不动。
2025-03-25 13:43:30
816
原创 鸿蒙5.0实战案例:同页面内抛滑操作响应时延问题分析思路&案例
a.应用或元服务内滑动操作响应时延应 ≤ Xb.时间起点:手指滑动;时间终点:界面发生变化。c.滑动速度:大于300ms/s;滑动次数:每次半屏,连续3次S标A标B标80ms120ms180ms抛滑操作响应时延:应用页面内手指开始滑动,到页面发生变化的时间。
2025-03-24 21:47:50
664
原创 鸿蒙5.0实战案例:滑动页面占位符加载完成时延问题分析思路&案例
滑动页面占位符加载完成时延的S标为40ms。数帧工具:Avidemux 2.6 - 32 bits (32-bit)通过视频抓取滑动停止为起始点:通过视频抓取占位符加载完成为终止点:根据终止点事件减去起始点事件计算完成时延:5161-4671 = 490ms占位符Image组件加载完成需要通过UI渲染,优化滑动过程中UI组件渲染效率可提高占位符加载完成效率。在UI显示阶段,动画是影响响应时延类的重要因素。鸿蒙(HarmonyOS)北向开发知识点记录~
2025-03-24 20:21:04
678
原创 鸿蒙5.0实战案例:基于ArkUI页面切换类点击操作完成时延问题分析思路&案例
应用或元服务内点击操作完成时延s标为900ms,允许误差范围5%。通过Avidemux工具查看视频来确定点击完成时延起点和终点,然后计算出整个耗时的时间,计算出来的这个时间在后面分析trace的时候会用到。
2025-03-24 17:33:28
780
原创 鸿蒙5.0实战案例:基于@ohos.data.unifiedDataChannel实现数据共享
本模块为统一数据管理框架(Unified Data Management Framework,UDMF)的组成部分,针对多对多跨应用数据共享的不同业务场景提供了标准化的数据通路,提供了标准化的数据接入与读取接口。2、声明一个 options 变量,并指定了要插入数据的数据通路枚举类型为 DATA_HUB。2、声明一个 options 变量,并指定了要查询数据的数据通路枚举类型为 DATA_HUB。2、声明一个 options 变量,并指定了要插入数据的数据通路枚举类型为 DATA_HUB。
2025-03-24 15:14:27
533
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人