
鸿蒙开发
文章平均质量分 92
程东升6
这个作者很懒,什么都没留下…
展开
-
鸿蒙开发5.0案例分析:原生应用占用空间管理
webview缓存(/data/storage/el2/base/cache/web/Cache)包含于在上述文件夹中,也可以调用 WebviewController.removeCache 单独清理web缓存。A:fs.rmdir是递归删除,会删除该文件夹以及子文件夹中的所有文件,但是当其子目录中有高权限的文件时,调用的接口无法删除此文件,导致无法删除此文件夹,报错:Directory not empty。定义长按手势,可以通过长按图片拉起菜单,选择删除指定图片。Q:为什么有些中文文件名的文件搜不到?原创 2025-05-30 20:28:56 · 857 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于class-transformer的对象与JSON相互转换
使用三方库class-transformer搭配JSON的JSON.parse,可以满足类似gson/fastjson绝大部分的需求,更多用法可以参考 https://github.com/typestack/class-transformer 文档。此外,建议审视设计的类和json是否合理,尽量避免使用复杂的转换。原创 2025-05-30 17:34:16 · 992 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于imageKnife对gif图的管理
实例化ImageKnifeOption后,先实例化网络请求new RequestOption(),load加载gif链接,添加监听属性addListener,回调返回拿到对象的width,height,delay。因为gif动图本质是一个播放,所以将每次拿到的帧数相加可以得到总帧数(max),经过for循环找到循环的次数maxtimes,再用总帧数除以次数得到每秒帧率avg。实例化ImageKnifeOption后,添加gif属性,将字段playTime设置传入播放的次数,即可完成播放次数的控制。原创 2025-05-30 16:42:52 · 694 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于分布式数据对象的跨设备数据同步
使用分布式数据对象进行跨设备数据同步时,需要申请ohos.permission.DISTRIBUTED_DATASYNC权限,允许不同设备间的数据交换,该权限为user_grant,需要向用户弹窗申请授权。随后创建分布式数据对象并加入可信组网(进行跨设备数据同步的设备需要登录相同的华为账号,同一网络,并开启蓝牙)。注:一个分布式对象加入组网时,如果它的数据与组网中的数据不同,它会刷新组网中的数据。若希望加入组网时不刷新组网中的数据,并且得到组网中的数据,可以将属性设置为undefined。原创 2025-05-30 15:30:59 · 558 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于手势的图片预览与缩放
1、使用组合手势GestureGroup,同时绑定捏合手势PinchGesture和滑动手势PanGesture,设置组合手势识别模式为并行识别模式:Parallel,并行识别组合手势中注册的手势将同时进行识别,直到所有手势识别结束,并行识别手势组合中的手势进行识别时互不影响。2、在onTouch事件中识别手指滑动方向,并判断边界是翻页还是拖动,方向为左右且到达边界,执行scaleUnEnable方法,将panGesture手势方向置为none,执行翻页;反之执行滑动手势,不翻页。原创 2025-05-30 14:40:31 · 388 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于Slider的滑动条
底层Progress进度条的填充色充当视频进度条的缓冲色,Progress的背景色充当视频进度条的背景色;下图主要表达的是拓展了Slider滑动手势的响应范围,红色区域就是原始的Slider响应去,上下橙色和粉色区域都是拓展的手势响应区。效果中的红色区域是Slider原始的可触摸区域,增大的橙色和粉色区主要思路是通过responseRegion这个全局属性来增大触摸热区,然后通过给热区设置平移手势来控制Slider的value来进而控制Slider的滑动,是一个类似视频软件拖动进度条的场景。原创 2025-05-30 13:48:05 · 627 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于TextInput的常见自定义效果解决方案
点击眼睛图标动态切换图标样式以及设置密码的显隐状态。原创 2025-05-29 21:55:10 · 958 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于状态变量实现复杂对象的状态监听
在上面数据模型中,Class User的字段bag是Class Bag类型,Class Book的字段bookName是Class BookName类型,这种情况都是一个对象的字段中还含有一个对象,这一类数据我们叫复杂对象,这类数据在使用状态变量监听的时候会比较麻烦,@State/@Prop等修饰器只能监听一层,也就是对象下的基本数据类型字段,对于多次嵌套的对象,在深度监听的时候需要用@Observed/@ObjectLink装饰器来进行深度观测,请看下面实现;但当对对象整体赋值时,UI却无法刷新。原创 2025-05-29 20:21:50 · 765 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于@ohos.util.stream的web离线缓存文件加载
通过fs.createStreamSync创建一个文件流this.stream,在doRead方法中使用this.stream.read (注:文件流的read方法,不是可读流readStream的read 方法) 从文件流中读取文件的内容,最后使用ReadStream的push方法将this.stream.read读取的数据推送到可读流缓冲区中。在ReadStream中实现doRead方法,在doRead中通过stream.read读取文件内容并移动光标位置,在执行push方法时会自动执行doRead。原创 2025-05-29 17:47:09 · 787 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:弱引用案例
用WeakRef创建对象的弱引用,支持在需要时获取原始对象,必须在对象仍然存在时才能获取,如果被回收需要重新创建,一般采用WeakRef的deref()方法获取原始对象。由于WeakRef不能检测对象何时被垃圾回收,没有提供与垃圾回收事件关联的回调机制,所以只能通过主动轮询的方式定期检查对象是否已经被回收。由于使用了WeakRef弱引用,只要没有其他强引用指向这个两个对象,它们就可以被垃圾回收,只要有一方使用弱引用,即可解除两者的循环引用。开发者需要依靠弱引用解决垃圾回收相关的内存管理问题。原创 2025-05-29 16:56:03 · 427 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于AVPlayer音频后台播放
在多个音频流同时播放场景下,如果系统不加管控,会造成多个音频流混音播放,容易让用户感到嘈杂,造成不好的用户体验。为满足应用对多音频并发策略的不同需求,音频打断策略预设了两种焦点模式,针对同一应用创建的多个音频流,应用可通过设置 焦点模式 ,选择由应用自主管控或由系统统一管控。想要实现应用后台播放,那么接入AVSession是必须的,否则业务的正常功能会同时受到限制,也必须有 BackgroundTasks Kit (后台任务管理)的能力,申请对应的长时任务,避免进入挂起(Suspend)状态。原创 2025-05-29 15:32:50 · 651 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于UI Observer实现UI组件埋点
组件埋点是一种在前端开发中常用的数据采集方法,它通过在页面中的组件(例如按钮、输入框、下拉框等)上添加跟踪代码,来收集用户的操作行为数据。这些数据可以帮助开发人员分析用户的使用习惯、行为路径等信息,从而优化产品的设计和功能。原创 2025-05-29 14:34:24 · 935 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于Picker的受限权限适配方案
Picker由系统独立进程实现,应用可以通过拉起Picker组件,用户在Picker上选择对应的资源(如图片、文档等),应用可以获取Picker返回的结果。在应用需要申请权限ohos.permission.CAMERA以使用相机识别卡证时,可以使用卡证识别Picker替代。在应用需要申请权限ohos.permission.CAMERA以使用相机扫描文档时,可以使用文档扫描Picker替代。在应用需要申请权限ohos.permission.CAMERA以使用相机扫码时,可以使用扫码Picker替代。原创 2025-05-29 13:48:15 · 672 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:应用内的生命周期流转
1.UIAbility组件生命周期。UIAbility组件是一种包含UI的应用组件,主要用于和用户交互。UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口。一个应用可以包含一个或多个UIAbility组件。例如在支付应用中,可以将入口功能和收付款功能分别配置为独立的UIAbility。当用户打开,切换和返回到对应应用时,应用中的UIAbility实例会在其生命周期的不同状态之间转换。原创 2025-05-28 21:29:42 · 675 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于原生能力的组件封装
应用中可基于自定义modifier扩展属性,基于@link传递属性值。如在选购商品时页面,选中之前和选中之后的样式表现不同。方案商品页面的文本组件Text并没有设置边框、背景颜色属性。通过自定义modifier为文本组件扩展设置边框、背景颜色、边框颜色属性。选择颜色、尺寸时,选择前后会表现不同的样式。核心代码1.自定义modifier继承CommonModifier ,并且定义setGroup2设置组件加载时的属性样式,定义setGroup1设置组件点击触发时的属性样式。// 组件点击时触发的样式。原创 2025-05-28 20:25:00 · 671 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于原生的应用主题开发
CustomColors 自定义主题颜色资源类型。原创 2025-05-28 17:39:29 · 612 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于滚动组件的手势处理
在ListItem组件上绑定滑动手势,在滑动手势onActionUpdate事件里控制ListItem的属性offset的参数x的值,在onActionEnd事件里判断当前左滑的偏移量控制是否拉出删除按钮,最后给ListItem绑定点击事件,使用animateTo展开删除按钮。原创 2025-05-28 16:36:49 · 469 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:高级图表实现解决方案
上方slider:x轴传值监听,下方slider:y轴传值监听。注册监听事件"seekBarXValueWatch"和"seekBarYValueWatch",滑动组件Slider,当值变化时触发监听,传递给setData。原创 2025-05-28 15:37:41 · 1109 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于原生能力实现图文混排
参与相对布局的容器内组件必须设置id,不设置id的组件组件不显示,容器id固定为__container__。使用StyledString实现图文混排效果,首先得让Text组件与StyledString绑定,绑定后即可使用StyledString设置文本样式以及对文本进行增、删、改、查等操作。应用中基于原生能力实现图文混排效果有多个方案可实现,推荐使用Flex作父容器实现的方案(方案一),此方案优点在于节点数量少,结构简单。内部头像使用Image组件,中间部分使用Text文本组件,右边使用Text文本组件。原创 2025-05-28 14:36:43 · 677 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于ArkUI实现类似.9图的拉伸能力
文档提供的图片,在设置了top、right、bottom、left四个参数后,图上的4角也就是1234区域不会被拉伸,关键点在于这4个参数的大小必须是原图的基础上的大小,所以需要将原图像素值转为vp后,在此基础上来确认参数。1.给Text设置背景图并将backgroundImageSize宽高都设置为100%,再使用backgroundImageResizable限定背景图拉伸区域。分别使用backgroundImageResizable和resizable实现聊天气泡的拉伸。原创 2025-05-28 13:43:57 · 214 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于Progress组件的进度条
在使用Progress的时候要注意像如上场景中的电池型的进度条,中间的进度条是横线,而我们的这个组件Linear类型中进度条默认是带有弧度的,若要改变其边角半径就要使用clip属性,而大多数开发者往往会忽略这一点,注意使用Progress组件的时候一定要使用clip属性。场景一和场景二是可以用progress组件配合其他属性来实现,但是有的不行,例如互联网运营商的app中的流量码表,这种建议不使用progress,使用canvas来自己绘制,具体实现代码如下。按指定的形状对当前组件进行裁剪。原创 2025-05-27 21:39:55 · 740 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:通过文件管理器使用三方应用对文件进行读写
第一步:被分享应用需要在module.json5配置文件的actions标签的值配置为"ohos.want.action.viewData",表示接收应用分享文件,配置uris字段,表示接收URI的类型,即只接收其他应用分享该类型的URI,如下表示本应用只接收scheme为file,类型为txt的文件。通过接口want的参数获取分享文件的URI,获取文件URI后通过fs.open接口打开文件,获取对应的file对象后,可对文件进行读写操作。我们经常通过文件管理器使用三方应用对文件进行读写,具体该如下。原创 2025-05-27 20:26:54 · 575 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于@ohos/axios的网络请求能力
Axios 是一个基于promise的网络请求库,可以运行node.js和浏览器中。基于Axios原库v1.3.4GitHub版本进行适配,使其可以运行在OpenHarmony并沿用其现有用法和特性。原创 2025-05-27 17:27:49 · 568 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于原生能力的网络状态感知
netCap属性用来存储数据网络的传输能力和承载类型,主要关注其中networkCap(网络能力)和bearType(网络类型)两个属性,用来观察当前网络的能力和类型变化。基于@ohos.net.connection模块能力,监听网络可用,网络切换,网络不可用,网络丢失等事件,使用前需要调用register开启监听,监听结束后需要调用unregister关闭当前监听请求。tips:当Wi-Fi和蜂窝同时连接的时候,通过网络能力获取bearType实际只返回Wi-Fi的状态信息,此为现象为系统规格。原创 2025-05-27 16:52:04 · 784 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于TLSSocket的通信能力
A:为防止泛洪攻击,网络模块暂不直接提供ping能力接口,参考三方库中能力封装处理:https://github.com/dgibson/iputils/blob/master/ping.c。1.可根据当前服务端/客户端收发数据的实际情况,调用socket中提供 setextraoptions 能力设置较合适发送/接收数据的缓存区间大小做处理。调用网络模块socket中TLSSocket能力建立通信连接,有关能力可参考文档:@ohos.socket.TLSSocket。原创 2025-05-27 15:43:33 · 240 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:冷启动首帧完成时延问题分析
冷启动首帧完成时延的性能衡量的起点为用户点击应用图标离手点时间,止点为应用首帧送显的时间。原创 2025-05-27 14:36:01 · 741 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:应用包体积大小优化解决方案
想要优化应用包体积首先要分析应用包体积大的原因,一般包体积大的原因可以分为文件重复、大文件两大类,其中文件重复Har重复和其他类型文件重复,大文件可以分为so文件大和其他类型文件大,针对不同的原因有针对性的优化方案。使用app-check-tool扫描文件大小占比,找到占比大文件,看是否为so文件,是否为重复文件,如果是重复文件,进一步查看重复原因,是否HAR重复引用导致,通过这些判断基本可以初步是被应用包体积大的原因。其它类型的大文件根据业务实际情况看是否可以删除或压缩。配置so压缩打包的压缩率等级。原创 2025-05-27 13:43:41 · 825 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于@ohos.pasteboard实现剪贴板功能
使用场景:安全控件会在点击粘贴按钮时给业务临时授予ohos.permission.SECURE_PASTE权限,因此使用安全控件访问剪贴板的业务不会受此次非兼容性变更的影响,暂未使用安全控件的业务也可以通过使用安全控件访问剪贴板内容。系统剪贴板支持对文本、HTML、URI、Want、PixelMap等内容的操作。使用场景:在应用A复制口令(使用按钮复制),打开应用b后直接读取到系统剪贴板里面的口令,然后跳转到口令里面的页面。在其他场景下,请应用使用粘贴控件读取剪贴板数据,使用方式参考:场景一。原创 2025-05-26 21:26:21 · 773 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:事件通信能力解决方案
弹窗功能依赖UI的执行上下文,不可在UI上下文不明确的地方使用,在一些异步回调或非UI界面中调用该接口,可能会无法跟踪到当前UI的上下文,导致接口执行失败,不能正常打开弹窗。所以当使用Eventhub传递事件时需要使用 promptAction.openCustomDialog 保证拿到同一UI上下文,才能正常打开弹窗。原创 2025-05-26 20:26:08 · 987 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:应用启动框架AppStartup应用场景分析
自动模式下启动框架的执行顺序在创建AbilityStage和执行AbilityStage onCreate回调之间。那启动框架内的任务执行顺序是什么样子呢?基于以下配置,进行任务时序分析。原创 2025-05-26 17:37:09 · 536 阅读 · 0 评论 -
鸿蒙开发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-05-26 16:48:37 · 672 阅读 · 0 评论 -
鸿蒙开发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-05-26 15:37:14 · 606 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于Code Linter实现代码检查
codelinter检查的结果,用户可以选择不改,又或者不想检查出来,就可以/* eslint-disable */屏蔽,但只能屏蔽有Ignore图标的。在工程根目录下创建code-linter.json5配置文件,可对于代码检查的范围及对应生效的检查规则进行配置,ruleSet和rules配置项共同确定了生效的 规则范围。在已打开的代码编辑器窗口单击右键点击Code Linter,或在工程管理窗口中鼠标选中单个或多个工程文件/目录,右键选择Code Linter执行代码检查。原创 2025-05-26 14:58:36 · 824 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于反混淆工具混淆后的日志定位
将nameCache.json文件放入nameCache文件内,将sourceMaps.map文件放入sourceMaps文件夹中,将生成的so文件放入nativeso文件中,input文件存放ArkTS和Native堆栈报错信息文件,output文件作为输出目录。工程源码的混淆可以降低工程被破解攻击的风险,但会导致无法直接通过Release应用的堆栈信息定位到源码的具体文件和行位置,不易于开发者快速定位解决问题。c.根据电脑的操作系统,从 DP平台 上的套件货架上下载对应版本的hstack工具。原创 2025-05-26 13:47:29 · 955 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于HiAppEvent能力的应用崩溃监控上报
HiAppEvent的接口设计,由系统决定回调的时机。使用这种机制,可以获取的应用崩溃事件结构化日志。HiAppEvent运营&运维事件软件模块,用于连接APP开发者、APM上传模块、HiView故障维测服务。支撑应用开发者完成运营和运维的数据分析工作。措施1:开放系统事件订阅API,可以订阅到系统检测到APP相关事件,包括崩溃、卡死等。措施2:开放自定义事件API,开发者可以本地记录事件、本地记录用户属性。措施3:开放故障日志,开发者订阅系统事件后同步可获取相关故障的日志。措施4。原创 2025-05-23 21:43:43 · 622 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:HiLog日志能力解析
Debug包。输出全量日志。Release包。默认不输出debug级别日志,可以参考日志等级修改来输出debug级别日志。原创 2025-05-23 20:28:16 · 632 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于短距离通信的BLE蓝牙扫描
相关接口参考文档: @ohos.bluetooth.access (蓝牙access模块 , @ohos.bluetooth.connection (蓝牙connection模块) , @ohos.bluetooth.socket (蓝牙socket模块)。ble扫描的是低功耗蓝牙,相比于connection扫描结果偏少,如果想要扫描到系统设置中的所有设备,需要去调用@ohos.bluetooth.connection模块中的connection.startbluetoothdiscovery。原创 2025-05-23 17:26:46 · 844 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于ArkUI实现类似Toast弹窗
使用@CustomDialog装饰器装饰自定义弹窗,在此装饰器内进行自定义内容(也就是弹框内容)、并创建构造器,与装饰器呼应相连。使用定时器,在页面的生命周期onPageShow中设置定时任务,页面显示时打开弹窗。可自定义弹窗位置,5.0规格,未设置alignment弹窗默认居中显示。可设置弹窗宽度、高度。gridCount弹窗宽度占栅格宽度的个数最大为4栅格宽度(400vp),API 12可通过width和height属性指定宽高。弹窗高度最大值:0.9 *(窗口高度 - 安全区域)原创 2025-05-23 16:51:03 · 897 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于Grid实现混合布局
ArkUI提供了Grid容器组件和子组件GridItem,用于构建网格布局。Grid用于设置网格布局相关参数,GridItem定义子组件相关特征。原创 2025-05-23 15:39:37 · 367 阅读 · 0 评论 -
鸿蒙开发5.0案例分析:基于Refresh组件的下拉刷新
整体思路:首先需要用装饰器@builder自定义构建一个函数,然后跟refresh的接口builder进行绑定Refresh({refreshing:$$this.isRefreshing,builder:this.customRefreshComponent()}),最后将通过refresh的系列回调逐步实现下拉过程中图标的动态变化。实现页面下拉刷新距离回调以及刷新距离自定义。原创 2025-05-23 14:38:35 · 890 阅读 · 0 评论