HarmonyOS Next应用开发案例
文章平均质量分 84
HarmonyOS Next应用开发案例,本帖下方集中了HarmonyOS Next应用开发时,会遇到的常见应用案例。后续会持续更新大量案例,帮助开发者快速学习.
青少年编程作品集
肖老师,IT高级软件工程师,从事软件设计与研发20年之久,具备丰富的设计和研发等编程经验。
精通逻辑算法,工程数控,数据分析与挖掘。有4年的金融保险银行数据逻辑算法分析处理工作经验,
有5年的电信移动无线通讯技术3G,4G网优网规相关编程经验,有4年的企业应用软件,工程控制应用软件,互联网应用软件编程经验
还有4年的移动APP,小程序,Web前后端软件编程经验。精通Scratch,Python,C,C++,Java,Javascript,html5,Css3等编程语言,
熟悉各种编程工具,以及编程的流程和编程环境。涉及积木编程,AI人工智能编程,大数据挖掘编程,手机APP和小程序编程。
展开
-
【HarmonyOS NEXT应用开发】案例140:基于RN框架实现高性能瀑布流页面
本案例针对瀑布流页面场景,基于@react-native-oh-tpl/flash-list、axios等框架,实现了一个高性能的瀑布流页面,该案例提供了关键的开发步骤,旨在帮助开发者高效开发出高性能的瀑布流页面。详情请查看。名称版本号0.72.270.0.26rnoh5.0.0.302及以上5.0.0.302及以上页面:页面渲染最大数≤300页面组件嵌套层数≤30。原创 2024-09-08 09:34:25 · 501 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例139:基于网络的抓包能力
1、点击顶部菜单栏【Help】-->选择【SSL Proxying】,点击【install Charles Root Certificate】安装Charles根证书即可;2)设置caPath(默认使用系统默认路径下CA证书,如默认证书认证失败返回60需要替换为请求域名的服务器证书,项目中设置可参考常见问题Q4)A3:使用为charles证书或系统根证书无法通过https校验 ,需替换为请求的域名证书。A2:需要检查下capath设置证书路径是否可访问、证书文件是否存在。原创 2024-09-08 09:32:18 · 203 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例138:应用打包安装定位定界指导
如果只有打包后的hap文件,通过ide打开hap一般为下图的结构,可以在module.json文件和pack.info找到包管理的配置,用文本编辑器打开resources.index可以找出原工程下resource声明的string.json文件的内容。需要通过签名校验,所以需要在打包阶段对其签名。需要在生成证书请求文件后申请发布证书和Profile文件,在工程签名的地方配置上刚才申请的签名证书,编译构建.app文件后进行上架。如果是测试场景,除了在ide运行安装hap之外,也可以用。原创 2024-09-08 09:30:48 · 97 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例137:如何定位解决焦点问题
API 11之前,未配置defaultFocus属性的情况下,当页面首次打开时,原先默认第一个可获焦的非容器组件会立即获取焦点。比如:页面初次构建完成时,使TextInput默认获取焦点,但不希望弹出键盘,则可以设置enableKeyboardOnfocus为false。defaultFocus:设置当前组件是否为当前页面上的默认焦点,仅在初次创建的页面第一次进入时生效。是获焦的能力,不一定当前焦点就在设置的组件上。一个节点获焦了,说的是它所在的焦点链获焦,也就是它和它的祖先节点都会触发onFocus。原创 2024-09-08 09:26:58 · 44 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例136:基于网络的VPN连接实现
使用过程中外网的用户可以使用 vpn client 连接组织搭建的 vpn server 以建立通信隧道,随后便建立了虚拟的私人网络,处于外网的 worker 和内网中的 server 可以相互通信。如首次添加"type": "vpn"时报红,“ctrl+左键”点击"type",在"enum"中添加“vpn”参数,1、建立vpn_client.cpp文件,写入vpn隧道通信启动、停止有关能力。1、建立vpn_client.cpp文件,写入vpn隧道通信有关能力。2、NDK添加可导出配置的使用接口能力。原创 2024-09-08 09:24:46 · 244 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例135:基于class-transformer的对象与JSON相互转换
我们在前端处理后端传送过来的数据时,经过反序列化转换的对象全是plain(literal) object(普通(字面量)对象),如下,这里我们手动写一个待转换成特定对象的 JavaScript对象(JSON形式)。如果是传入的字符串我们需要搭配JSON.parse来使用,将字符串转化成JSON格式的UserJson对象,使用plainToInstance来进行转换,由于使用了@Exclude()注解。此外,建议审视设计的类和json是否合理,尽量避免使用复杂的转换。原创 2024-09-08 09:22:34 · 136 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例134:基于imageKnife对gif图的管理
实例化ImageKnifeOption后,先实例化网络请求new RequestOption(),load加载gif链接,添加监听属性addListener,回调返回拿到对象的width,height,delay。因为gif动图本质是一个播放,所以将每次拿到的帧数相加可以得到总帧数(max),经过for循环找到循环的次数maxtimes,再用总帧数除以次数得到每秒帧率avg。实例化ImageKnifeOption后,添加gif属性,将字段playTime设置传入播放的次数,即可完成播放次数的控制。原创 2024-09-08 09:18:27 · 104 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例133:基于分布式数据对象的跨设备数据同步
若A设备将数据save到B设备,B设备创建分布式对象时会自动恢复数据,此时A设备revokesave无法撤销B设备已回复的数据。A、B两条设备组网后,A设备开启监听后(on("change")),B设备修改数据,随后A设备读取数据,此时读取到的是B设备修改后的数据。通过save("local")将对象数据保存成功后,当应用存在时不会释放对象数据,当应用退出后,重新进入应用时,恢复保存在设备上的数据。A、B两台设备分别点击创建分布式数据对象,并开启数据变更监听,此时在A设备输入数据,B设备即可自动同步。原创 2024-09-08 09:15:43 · 230 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例132:基于手势的图片预览与缩放
1、使用组合手势GestureGroup,同时绑定捏合手势PinchGesture和滑动手势PanGesture,设置组合手势识别模式为并行识别模式:Parallel,并行识别组合手势中注册的手势将同时进行识别,直到所有手势识别结束,并行识别手势组合中的手势进行识别时互不影响。2、在onTouch事件中识别手指滑动方向,并判断边界是翻页还是拖动,方向为左右且到达边界,执行scaleUnEnable方法,将panGesture手势方向置为none,执行翻页;反之执行滑动手势,不翻页。原创 2024-09-08 09:12:59 · 66 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例131:基于Slider的滑动条
底层Progress进度条的填充色充当视频进度条的缓冲色,Progress的背景色充当视频进度条的背景色;下图主要表达的是拓展了Slider滑动手势的响应范围,红色区域就是原始的Slider响应去,上下橙色和粉色区域都是拓展的手势响应区。效果中的红色区域是Slider原始的可触摸区域,增大的橙色和粉色区主要思路是通过responseRegion这个全局属性来增大触摸热区,然后通过给热区设置平移手势来控制Slider的value来进而控制Slider的滑动,是一个类似视频软件拖动进度条的场景。原创 2024-09-08 09:10:23 · 173 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例130:基于TextInput的常见自定义效果解决方案
通过状态变量动态改变图标样式,然后给输入框设置不显示默认的密码图标 .showPasswordIcon(false),图标动态切换接合密码的显隐状态.showPassword(this.changeState)来达到自定义密码图标的效果。当输入框输入文字时,右侧显示删除清空内容按钮,主要利用textInput属性cancelButton,该属性设置右侧清除按钮样式,不支持内联模式。输入框未获焦时热搜词自动滚动,输入框获焦时输入框热搜词暂停滚动,热搜词文字到输入框右侧时文字内容会渐变显示。原创 2024-09-07 12:34:52 · 143 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例129:基于状态变量实现复杂对象的状态监听
在上面数据模型中,Class User的字段bag是Class Bag类型,Class Book的字段bookName是Class BookName类型,这种情况都是一个对象的字段中还含有一个对象,这一类数据我们叫复杂对象,这类数据在使用状态变量监听的时候会比较麻烦,@State/@Prop等修饰器只能监听一层,也就是对象下的基本数据类型字段,对于多次嵌套的对象,在深度监听的时候需要用@Observed/@ObjectLink装饰器来进行深度观测,请看下面实现;但当对对象整体赋值时,UI却无法刷新。原创 2024-09-07 12:33:21 · 249 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例128:基于@ohos.util.stream的web离线缓存文件加载
通过fs.createStreamSync创建一个文件流this.stream,在doRead方法中使用this.stream.read (注:文件流的read方法,不是可读流readStream的read 方法) 从文件流中读取文件的内容,最后使用ReadStream的push方法将this.stream.read读取的数据推送到可读流缓冲区中。是一种用于处理数据的抽象接口,适合处理大量数据或连续的数据流,提供了丰富的事件和方法,用于对数据进行流式处理和操作。是既可读又可写的流。通过流读取文件里的资源。原创 2024-09-07 12:31:19 · 165 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例127:弱引用在HarmonyOS上的使用
用WeakRef创建对象的弱引用,支持在需要时获取原始对象,必须在对象仍然存在时才能获取,如果被回收需要重新创建,一般采用WeakRef的deref()方法获取原始对象。由于WeakRef不能检测对象何时被垃圾回收,没有提供与垃圾回收事件关联的回调机制,所以只能通过主动轮询的方式定期检查对象是否已经被回收。由于使用了WeakRef弱引用,只要没有其他强引用指向这个两个对象,它们就可以被垃圾回收,只要有一方使用弱引用,即可解除两者的循环引用。开发者需要依靠弱引用解决垃圾回收相关的内存管理问题。原创 2024-09-07 12:29:49 · 84 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例126:HarmonyOS原生应用占用空间管理
A:fs.rmdir是递归删除,会删除该文件夹以及子文件夹中的所有文件,但是当其子目录中有高权限的文件时,调用的接口无法删除此文件,导致无法删除此文件夹,报错:Directory not empty。例如:app级别,加密类型为el1的缓存会保存到/data/storage/el1/base/cache目录下。使用Grid将图片排列展示,并通过bindContextMenu给image组件绑定菜单,长按拉起删除选择框,并实时展示删除后剩余图片。定义长按手势,可以通过长按图片拉起菜单,选择删除指定图片。原创 2024-09-07 12:28:28 · 136 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例125:基于AVPlayer音频后台播放
在多个音频流同时播放场景下,如果系统不加管控,会造成多个音频流混音播放,容易让用户感到嘈杂,造成不好的用户体验。)策略,对多音频播放的并发进行管控。为满足应用对多音频并发策略的不同需求,音频打断策略预设了两种焦点模式,针对同一应用创建的多个音频流,应用可通过设置。音乐播放是媒体最重要的组成之一,以下是AVPlayer将Audio媒体资源(比如mp3等)转码为可听见的音频模拟信号,并通过输出设备进行播放。定义,不同的类型代表了不同场景的控制能力,对于播控中心来说,会展示不同的控制模版。原创 2024-09-07 12:26:36 · 141 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例124:基于UI Observer实现UI组件埋点
在页面中使用,需要注意的在下面代码中按钮上的id属性为可选配置项,主要目的是用于标识具体点击的是哪个组件,自己定义的id更明显,如不想每一个组件都配置,可以使用FrameNode.getUniqueId接口获取系统分配的ID也可以。ps:当前实现的监听是页面中任何一个滚动组件List、Scroll等只要触发了滚动都该监听都能识别到,并且可以在回调的info中拿到滚动容器组件的ID,如需要精准监听对应的滚动组件可以参考。页面中注册,页面中注册的时候传递自己的处理逻辑,获取页面跳转时间统计页面停留时长。原创 2024-09-07 12:24:42 · 140 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例123:基于Picker的受限权限适配方案
注意不能在picker的回调里直接使用此uri进行打开文件操作,需要定义一个全局变量保存uri,使用类似一个按钮去触发打开文件。最后再将通过fs.read读取到selecturi的音频文件的buffer,再通过fd使用fs.writeSync接口将buffer写入这个音频文件,编辑修改完成后关闭fd。Picker由系统独立进程实现,应用可以通过拉起Picker组件,用户在Picker上选择对应的资源(如图片、文档等),应用可以获取Picker返回的结果。原创 2024-09-07 12:23:05 · 103 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例122:应用内的生命周期流转
UIAbility类提供了一系列回调,通过这些回调可以知道当前UIAbility实例的某个状态发生改变,会经过UIAbility实例的创建和销毁,或者UIAbility实例发生了前后台的状态切换。自定义组件的生命周期回调函数用于通知用户该自定义组件的生命周期,这些回调函数是私有的,在运行时由开发框架在特定的时间进行调用,不能从应用程序中手动调用这些回调函数。场景:某些场景下需要使用消息的发布订阅模式去实现业务功能,发布消息,订阅消息,改变页面。UIAbility组件生命周期。触发API与调用时机。原创 2024-09-07 12:21:22 · 124 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例121:基于原生能力的组件封装
在应用开发中,我们通常需要使用相同功能和样式的ArkUI组件,例如购物页面中会使用相同样式的Button按钮、Text显示文字,我们常用的方法是抽取公共样式或者封装成一个自定义组件到公共组件库中以减少冗余代码。自定义class实现Row组件的AttributeModifier接口,通过传入instance参数类型RowAttribute识别组件为Row类型,基于instance设置属性值,Row组件的该属性即生效。为了解决这个问题,基于原生能力的组件封装,将使我们更高效地开发应用程序。原创 2024-09-07 12:18:37 · 114 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例120:基于原生的应用主题开发
可以通过WithTheme可以设置深浅色模式,ThemeColorMode.SYSTEM模式表示跟随系统模式,ThemeColorMode.LIGHT模式表示浅色模式,ThemeColorMode.DARK模式表示深色模式。CustomTheme的属性是可选的,只需要复写需要的修改的部分,其余部分会继承自系统。场景一和场景二的区别在哪里?在WithTheme作用域内,组件的样式资源取值跟随指定的模式读取对应的深浅色模式系统和应用资源值,WithTheme作用域内的组件配色跟随指定的深浅模式生效。原创 2024-09-05 11:31:18 · 142 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例119:基于滚动组件的手势处理
在ListItem组件上绑定滑动手势,在滑动手势onActionUpdate事件里控制ListItem的属性offset的参数x的值,在onActionEnd事件里判断当前左滑的偏移量控制是否拉出删除按钮,最后给ListItem绑定点击事件,使用animateTo展开删除按钮。原创 2024-09-05 11:30:13 · 41 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例118:高级图表实现解决方案
定义好自己的数据类之后,就要定义MyRender类了,实线具体的绘制功能,MyRender类继承自LineChartRenderer,因为是要绘制曲线,所以重写的是drawCubicBezier方法,MyRender类的代码。就是调用path2D的方法bezierCurveTo方法,这个方法有6个参数,分别是控制点1的(x值,y值 )和 控制点2的(x值,y值)以及目标点的(x值,y值)。直接把父类的方法抄过来即可。aboutToAppear定义x/y轴的外层图表时,x轴只用定义一次,Y轴根据业务来。原创 2024-09-05 11:29:02 · 91 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例117:基于原生能力实现图文混排
参与相对布局的容器内组件必须设置id,不设置id的组件组件不显示,容器id固定为__container__。使用StyledString实现图文混排效果,首先得让Text组件与StyledString绑定,绑定后即可使用StyledString设置文本样式以及对文本进行增、删、改、查等操作。应用中基于原生能力实现图文混排效果有多个方案可实现,推荐使用Flex作父容器实现的方案(方案一),此方案优点在于节点数量少,结构简单。内部头像使用Image组件,中间部分使用Text文本组件,右边使用Text文本组件。原创 2024-09-05 11:27:24 · 70 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例116:基于ArkUI实现类似.9图的拉伸能力
文档提供的图片,在设置了top、right、bottom、left四个参数后,图上的4角也就是1234区域不会被拉伸,关键点在于这4个参数的大小必须是原图的基础上的大小,所以需要将原图像素值转为vp后,在此基础上来确认参数。1.给Text设置背景图并将backgroundImageSize宽高都设置为100%,再使用backgroundImageResizable限定背景图拉伸区域。分别使用backgroundImageResizable和resizable实现聊天气泡的拉伸。原创 2024-09-05 11:25:50 · 22 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例115:基于Progress组件的进度条
在使用Progress的时候要注意像如上场景中的电池型的进度条,中间的进度条是横线,而我们的这个组件Linear类型中进度条默认是带有弧度的,若要改变其边角半径就要使用clip属性,而大多数开发者往往会忽略这一点,注意使用Progress组件的时候一定要使用clip属性。场景一和场景二是可以用progress组件配合其他属性来实现,但是有的不行,例如互联网运营商的app中的流量码表,这种建议不使用progress,使用canvas来自己绘制,具体实现代码如下。按指定的形状对当前组件进行裁剪。原创 2024-09-05 11:24:27 · 87 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例114:通过文件管理器使用三方应用对文件进行读写
第一步:被分享应用需要在module.json5配置文件的actions标签的值配置为"ohos.want.action.viewData",表示接收应用分享文件,配置uris字段,表示接收URI的类型,即只接收其他应用分享该类型的URI,如下表示本应用只接收scheme为file,类型为txt的文件。通过接口want的参数获取分享文件的URI,获取文件URI后通过fs.open接口打开文件,获取对应的file对象后,可对文件进行读写操作。我们经常通过文件管理器使用三方应用对文件进行读写,具体该如下。原创 2024-09-05 11:23:05 · 87 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例113:基于@ohos/axios的网络请求能力
FormData可以将表单字段的键值对以键值对的方式添加,同时也支持添加文件,在文件上传的场景中,我们可以使用FormData对象来收集表单数据,包括文件和其他文本字段,然后将其发送到后端服务器。T 就是这个 JSON 对象的类型。Axios可以通过FormData对象上传文件,在FormData中追加文件,我们需要用POST方法,再配置headers,需要这个浏览器才知道是表单。在请求发送前进行必要操作处理,例如设置请求头,获取请求配置或者修改,设置超时时间等,相当于是对每个接口里相同操作的一个封装。原创 2024-09-05 11:21:22 · 146 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例112:基于原生能力的网络状态感知
netCap属性用来存储数据网络的传输能力和承载类型,主要关注其中networkCap(网络能力)和bearType(网络类型)两个属性,用来观察当前网络的能力和类型变化。基于@ohos.net.connection模块能力,监听网络可用,网络切换,网络不可用,网络丢失等事件,使用前需要调用register开启监听,监听结束后需要调用unregister关闭当前监听请求。tips:当Wi-Fi和蜂窝同时连接的时候,通过网络能力获取bearType实际只返回Wi-Fi的状态信息,此为现象为系统规格。原创 2024-09-05 11:19:34 · 104 阅读 · 0 评论 -
【HarmonyOS NEXT应用开发】案例111:基于TLSSocket的通信能力
接收方读取套接字(Socket)缓冲区数据不够及时,可能存在粘包/黏包情况,需要做对应的接收处理。数据发送过程中 当发送方每次写入数据 < 套接字(Socket)缓冲区大小;接收方读取套接字(Socket)缓冲区数据不够及时,可能存在粘包/黏包情况,需要做对应的接收处理。场景一 :用户场景需要实现网上银行叫号及其他需要建立即时通信传输数据时,可通过TCP/TLSSocket方式加密传输数据。用户场景需要实现网上银行叫号及其他需要建立即时通信传输数据时,可通过tcp/tlsSocket方式加密传输数据。原创 2024-09-05 11:17:14 · 79 阅读 · 0 评论 -
【HarmonyOS Next应用开发案例】130案例应用开发1-130
提升加载时用户体验的方法。在许多场景下,我们都需要引导用户按照步骤完成任务,此功能在HarmonyOS Next中可以使用Stepper来实现,但是Stepper的定制化能力较弱,开发者无法定制上下页切换按钮的样式、位置,因此本例介绍了如何基于Swiper实现Stepper的能力。本示例提供组件实例在页面间共享的解决方案:通过Stack容器,下层放地图组件,上层放Navigation组件来管理页面,页面可以共享下层的地图组件,页面中需要显示地图的区域设置为透明,并参考触摸交互控制,设置事件透传及响应区域。原创 2024-09-02 13:37:20 · 1444 阅读 · 0 评论 -
【HarmonyOS Next应用开发案例】130案例应用开发1-35
TabBar在大部分的APP当中都能够使用到,不同的APP可能存在不一样的TabBar样式,Tab组件自带的TabBar属性对于部分效果无法满足,如页签中间显示一圈圆弧外轮廓等, 因此我们需要去自己定义一个TabBar页签来满足开发的需要。对于多层嵌套的情况,比如二维数组,或者数组项class,或者class的属性是class,他们的第二层的属性变化是无法观察到的。在很多应用中,向上滑动"我的"页面,页面顶部会有如下变化效果:一部分信息逐渐隐藏,另一部分信息逐渐显示,同时一些组件会进行缩放或者位置移动。原创 2024-09-02 13:57:54 · 958 阅读 · 0 评论