自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 收藏
  • 关注

原创 为什么大家都在“挺”鸿蒙?转鸿蒙开发?

试想某一天,应用软件能够在手机、电视、手表甚至汽车等设备上,实现无缝流转、纵享丝滑。这不仅是畅想,而是鸿蒙正在布局的“遥遥领先”。随后,。

2024-07-18 22:06:46 1540

原创 鸿蒙(HarmonyOS)性能优化实战-页面布局检查器ArkUI Inspector使用教程

DevEco Studio内置ArkUI Inspector工具,开发者可以使用ArkUI Inspector,在DevEco Studio上查看应用在真机上的UI显示效果。利用ArkUI Inspector工具,开发者可以快速定位布局问题或其他UI相关问题,同时也可以观察和了解不同组件之间的布局关系和属性,学习如何通过布局属性来控制组件的显示方式。

2024-07-29 13:51:48 480

原创 鸿蒙(HarmonyOS)性能优化实战-应用性能分析工具CPU Profiler使用指南

本文档介绍应用性能分析工具CPU Profiler的使用方法,该工具为开发者提供性能采样分析手段,可在不插桩情况下获取调用栈上各层函数的执行时间,并展示在时间轴上。开发者可通过该工具查看TS/JS代码及NAPI代码执行过程中的时序及耗时情况,进而发现热点函数及性能瓶颈,进行应用层性能优化。

2024-07-28 22:22:45 380

原创 【鸿蒙实战开发】混合开发-web组件入门和实战

/ 网页是否在加载中// 网页加载进度// 当前访问页面历史记录索引@BuilderRow() {.width(18)// 刷新网页}).width(50)test 方法,获取网页调用后传参select 方法,选择原生相册,获取选择图片结果显示到网页中// 测试方法// 选择相册// 2\. JSBridge代理// 参数 1:注入应用侧JavaScript对象// 参数 2:注入对象的名称,与window中调用的对象名一致。

2024-07-28 21:54:00 385

原创 【鸿蒙实战开发】基于Refresh组件的下拉刷新

实现页面下拉刷新距离回调以及刷新距离自定义。整体思路:首先需要用装饰器@builder自定义构建一个函数,然后跟refresh的接口builder进行绑定Refresh({refreshing:$$this.isRefreshing,builder:this.customRefreshComponent()}),最后将通过refresh的系列回调逐步实现下拉过程中图标的动态变化。第一步:自定义refresh刷新组件。第二步:根据refreshOffset设置触发下拉刷新的距离。

2024-07-28 21:28:48 299

原创 【鸿蒙实战开发】基于HiAppEvent能力的应用崩溃监控上报

HiAppEvent的接口设计,由系统决定回调的时机。使用这种机制,可以获取的应用崩溃事件结构化日志。HiAppEvent运营&运维事件软件模块,用于连接APP开发者、APM上传模块、HiView故障维测服务。支撑应用开发者完成运营和运维的数据分析工作。主要通过如下措施支持开发者快速完成APP线上的运营和运维功能:⦁ 措施1:开放系统事件订阅API,可以订阅到系统检测到APP相关事件,包括崩溃、卡死等。⦁ 措施2:开放自定义事件API,开发者可以本地记录事件、本地记录用户属性。

2024-07-28 20:40:52 427

原创 【鸿蒙实战开发】HiLog日志能力介绍

Debug包。输出全量日志。Release包。默认不输出debug级别日志,可以参考日志等级修改来输出debug级别日志。

2024-07-28 19:57:05 426

原创 【鸿蒙实战开发】基于短距离通信的BLE蓝牙扫描

蓝牙是一种短距的无线通讯技术,可实现固定设备、移动设备之间的数据交换。一般将蓝牙3.0之前的BR/EDR蓝牙称为传统蓝牙,而将蓝牙4.0规范下的BLE蓝牙称为低功耗蓝牙。BLE模块提供了对蓝牙操作和管理的方法。ACCESS_BLUETOOTH 权限是很多蓝牙接口需要申请的,比如:ble.getConnectedBLEDevices(获取和当前设备连接的BLE设备)、ble.startBLEScan(发起BLE扫描流程)。

2024-07-26 22:05:18 376

原创 【鸿蒙实战开发】基于Grid实现混合布局

ArkUI提供了Grid容器组件和子组件GridItem,用于构建网格布局。Grid用于设置网格布局相关参数,GridItem定义子组件相关特征。

2024-07-26 21:39:59 318

原创 【鸿蒙实战开发】基于ArkUI实现类似Toast弹窗

方案当前自定义弹窗的openAnimation和closeAnimation只能实现弹窗原地打开的相关动画设置,无法设置弹窗位置上变化的效果。为了避免弹窗原地打开关闭,这里选择通过给弹窗设置组件转场动画(transition)来实现。当然也可以根据具体想要实现的效果选择其他动画来自定义弹窗动画。⦁ 设置动画事件为500ms组件转场时插入的起点和删除的终点为屏幕以下300vp。

2024-07-26 21:38:49 460

原创 【鸿蒙实战开发】基于Text的自定义字体

A:在onCreate中注册字体时,页面还未创建,所以字体未生效,需要在页面创建完成之后再加载字体,推荐在页面注册回调windowStage.loadContent中进行字体注册。给Text组件设置fontFamily属性,fontFamily中的名字就是上面注册时设置的字体名,最后使用的emoji表情,就是从下载的三方emoji字体文件钟直接粘贴得到的。Q:在page中注册字体没问题,移到UIAbility时会偶现字体注册失败,希望提供一个稳定在UIAbility注册字体的方案。

2024-07-26 20:28:52 295

原创 【鸿蒙实战开发】基于组件嵌套的滑动

基于nestedScroll实现WaterFlow与Scroll混合滑动。

2024-07-26 17:31:03 575

原创 【鸿蒙实战开发】基于Navigation的路由拦截管理

路由拦截是开发中常见场景,比如校验用户是否登录、路由拦截添加弹窗等。通过setInterception可以实现这些功能,该需求主要用于路由拦截前调用开发者设置的拦截回调,和拦截回调里开发者返回处理后需要跳转的页面信息。设置并开启页面路由拦截registerInterception,通过全局变量LocalStorage判断用户当前是否登录,未登录时点击购物车会被拦截并跳转至登录页,输入用户名和密码后将LocalStorage改为true表示已登录,然后跳转至购物车。

2024-07-26 15:57:40 988

原创 【鸿蒙ArkUI实战开发】基于OpenGL渲染视频画面帧

⦁ 在napi 接口init的时候在Xcomponent的OnSurfaceCreatedCB回调中初始化渲染线程,通过OH_NativeImage_Create创建nativeImage。⦁ 设置窗口:获取并设置属性SurfaceID,该surfaceId是native侧nativeImage的surfaceID,调用play方法开始播放。在渲染线程中更新画面帧数据到OpenGL纹理,并做对应的opengl处理后,通过SwapBuffers()方法上屏。第一阶段:鸿蒙初中级开发必备技能。

2024-07-26 15:10:49 586

原创 【鸿蒙ArkUI实战开发】基于promptAction全局弹窗

可以使用openCustomDialog接口, 创建并弹出dialogContent对应的自定义弹窗,使用Promise异步回调。创建Params类方便开发者进行传参的,开发者可以在@Builder里自定义组件的内容,宽度跟随子节点自适应,圆角为0,弹窗背景色为透明色;上述代码中uiContext代表上下文,wrapBuilder(buildText)代表自定义节点,new Params(this.message)代表传参。

2024-07-26 14:34:16 398

原创 【鸿蒙ArkUI实战开发】基于Swiper的页面布局

给Swiper组件设置.nextMargin(50).prevMargin(50)属性。给Swiper组件添加onChange事件,设置当前this.currentIndex=index,当currentIndex为首页或者尾页时,设置上一张以及下一张图片的缩放值。// 设置当前index缩放值为最大值// 当前index=0时,设置上一张图片的缩放值} else// 当前index不为0时,设置上一张图片的缩放值// 当index为最后一张图片时,设置下一张图片的缩放值} else。

2024-07-26 13:59:00 381

原创 【鸿蒙ArkUI实战开发】基于Search组件实现搜索栏

方案基于Search组件的searchIcon属性设置搜索图标,searchIcon可以设置size、color。注意:当前搜索图标不支持隐藏且不支持位置调整。基于searchButton属性设置搜索框末尾搜索按钮。基于该属性可更改文本内容及文本样式。核心代码Search({ value: this.changeValue, placeholder: '请输入搜索内容', controller: this.controller })//设置搜索框末尾搜索按钮,可修改文本内容及文本样式。

2024-07-25 22:15:40 974

原创 【鸿蒙ArkUI实战开发】基于ArkUI的透明页面效果

透明页面也可以叫做弹窗页面,实际开发场景中经常有一个页面覆盖在另一个页面上的效果,例如:评论弹窗页面、广告弹窗页面等。router路由无法更改页面模式,所以无法直接实现透明页面,需要借助拉起子窗口的方案实现透明页面的效果。思路如下:获取窗口实例。拉起一个子窗口并加载对应页面。设置子窗口背景透明。定义子窗口的关闭方案。在Ability中获取windowStage实例。创建一个子窗口作为页面载体,并加载RouterOpacityPage页面。

2024-07-25 21:20:23 883

原创 【鸿蒙实战开发】基于手势绑定的常见问题处理

在默认情况下,手势事件为非冒泡事件,当父子组件绑定相同的手势时,父子组件绑定的手势事件会发生竞争,最多只有一个组件的手势事件能够获得响应,默认子组件优先识别通过gesture绑定的手势。当父组件使用priorityGesture绑定与子组件同类型的手势时,父组件优先识别通过priorityGesture绑定的手势,子组件的手势不会进行识别响应。

2024-07-25 17:09:17 967

原创 【鸿蒙ArkUI实战开发】基于ArkUI的动效能力

控制输入框的宽度和显隐状态实现第一段动画,输入框的缩放动画完成后onFinish隐藏输入框,同时展示加载动画。配置完自定义的转场动画,然后将name指定的NavDestination页面信息入栈。

2024-07-25 16:39:09 829

原创 【鸿蒙实战开发】基于webview拉起自定义键盘

整体实现效果为:通过web的同层渲染功能实现将原生TextInput组件渲染到H5需要使用自定义键盘的页面中,这样就可以实现在H5拉起自定义键盘,并且使用它的全部功能。

2024-07-25 15:26:54 965

原创 【鸿蒙实战开发】C++子线程与UI主线程通信方案

ArkTS是单线程的,其通过事件循环机制来处理异步任务,这一特性,同样也深入影响了Node-API的模块开发。在Native线程中既要保证没有多线程问题,又要保证任务的正确执行。针对在HarmonyOS中,Native子线程不能直接访问ArkTS主线程的资源的场景,Node-API提供了napi_threadsafe_function这一套线程安全函数接口,用来实现异步通信操作。下面介绍napi_threadsafe_function的方式。

2024-07-25 14:52:30 760

原创 【鸿蒙实战开发】使用Snapshot Insight分析ArkTS内存问题

问题通常会在开发的过程中逐渐积累,到最终暴露出来时可能已经涉及了多个模块、多种逻辑,各种逻辑互相耦合,导致分析的难度大大增加。这种情况下,我们建议把性能相关的工作也能做到平时,在开发态也去关心程序的性能问题。例如,刚写了一个很长的引用关系、增加了一些注册实例的逻辑或者做了一些父子组件的变量传递,这种时候就可以去结合逻辑自己设想一下,会不会引发一定的性能问题,甚至可以在平时就用调优工具来自测试。这样做到每个开发阶段都保证了性能的可靠,那么在项目日益增大的同时,性能问题也不会严重到离谱、无法分析。

2024-07-25 14:04:56 611

原创 【鸿蒙实战开发】基于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)”

2024-07-25 13:36:57 1170

原创 【鸿蒙实战开发】基于lycium的开源c库编译与集成

对于c库编译问题,应用经常会遇到如下业务诉求:基于HarmonyOS编译开源C库:开源c库编译完成后的集成需要使用开源c库lycium的使用说明:lycium的特点就是自动化编译,只需要一个./build.sh命令就可以完成编译,下面的编译例子(openssl)代码库是通过hpkbuild脚本从github或者gitee上面拉取,在hpkbuild脚本中已经默认提供了一套编译默认的配置,也可以按照需求修改。

2024-07-24 22:42:32 969

原创 【鸿蒙实战开发】基于密钥库签名验签的用户认证

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. 设置的认证类型组合不支持。

2024-07-24 21:38:39 791

原创 【鸿蒙实战开发】基于rcp的网络请求能力

rcp模块提供HTTP数据请求功能,请求性能如接口的易用性、性能、功耗方面,对比Network Kit HTTP网络API,rcp采用面向对象和场景的设计,API使用更简单、更灵活,满足不同场景的使用需求,具备更好的扩展性和更优的性能。当根证书校验失败,请求使用自签名证书不支持/无法通过校验 或 证书过期需要重新修改证书时,希望通过rcp网络请求能力忽略证书校验。:当根证书校验失败,请求使用自签名证书不支持/无法通过校验 或 证书过期需要重新修改证书时,通过rcp网络请求能力忽略证书校验。

2024-07-24 21:19:09 745

原创 【鸿蒙实战开发】基于原生能力获取视频缩略图

使用 getThumbnail和AVImageGenerator接口可以实现从原始媒体资源中获取视频指定时间的缩略图。效果图方案1.通过photoAccessHelper的getAlbums方法获取获取视频相册对象。2.通过视频检索条件调用album.getAssets方法,获取视频对象。3.调用 Asset.getThumbnail接口获取视频对象的缩略图(pixelMap)。4.通过image组件显示pixelMap。核心代码场景二:指定时间获取视频的缩略图方案1. 通过用createAVImage

2024-07-24 20:42:08 897

原创 【鸿蒙实战开发】基于@ohos/crypto-js实现加解密工具箱

ohos/crypto-js是一个根据crypto-js库移植的鸿蒙三方库,适配源库4.2.0版本,提供了一系列加密算法和安全工具,主要用于执行各种消息摘要计算和对称加解密操作。

2024-07-24 17:34:43 845

原创 【鸿蒙实战开发】基于connection的网络连接管理能力

应用侧需要知道用户当前连接网络状态并作对应的业务处理,如网络断开返回弹框提示、应用中是否按缓存数据展示图片等。应用侧需要知道用户当前连接网络状态并作对应的业务处理,如网络断开返回弹框提示、应用中是否按缓存数据展示图片等。:应用内部获取当前使用网络类型为wifi / 移动数据 及当前网络可连接状态做业务处理。:获取当前连接网卡链路地址、DNS地址等信息判断处理用户连接网络位置等应用侧能力。获取当前连接网卡链路地址、DNS地址等信息判断处理用户连接网络位置等应用侧能力。

2024-07-24 17:33:09 128

原创 【鸿蒙实战开发】基于wifiManager的网络扫描及IP地址获取

场景一:查看附近可连接wifi网络的信号强度(rssi)、热点能力、服务集标识(ssid)等信息,开发者可自定义策略选择网络场景二:通过当前连接wifi的IP地址判断用户所属有关位置信息查看附近可连接wifi网络的信号强度(rssi)、热点能力、服务集标识(ssid)等信息,开发者可自定义策略选择网络日志中打印结果显示可参考如图当前暂不支持三方直接调用扫描能力,提供 wifimanager.getScanInfoList 方法获取到扫描结果通过当前连接wifi的IP地址判断用户所属有关位置信息。

2024-07-24 14:32:25 337

原创 【鸿蒙实战开发】基于CameraKit,通过avrecorder进行录像

录像是相机应用的最重要功能之一,录像是循环帧的捕获。本文通过CameraKit自定义相机并通过avrecorder进行录像。

2024-07-24 14:06:22 1007

原创 【鸿蒙实战开发】HarmonyOS对request 上传下载的说明

request主要给应用提供上传下载文件、后台传输代理的基础能力。

2024-07-24 13:28:57 1019

原创 【鸿蒙实战开发】HarmonyOS对各种图片编解码格式的支持

ARCH代表构建架构,64位为arm64-v8a,32位为armeabi-v7a。不知道需要重点掌握哪些鸿蒙应用开发知识点?在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库和头文件。2.1 将libavif库添加到工程中,参考链接: libavif三方库说明。三方库的测试使用原库自带的测试用例来做测试, 准备三方库测试环境。《鸿蒙 (Harmony OS)开发学习手册》(共计892页)第一阶段:鸿蒙初中级开发必备技能。第三阶段:应用开发中高级就业技术。

2024-07-23 22:05:38 951

原创 【鸿蒙实战开发】跨语言的复杂参数类型传递

我们经常在ArkTS与C++之间相互传递参数,那么具体该如何传呢?通过 napi_get_value_string_utf8 获取字符串长度,然后根据长度将从 ArkTS 侧传过来的 napi_value 转换成字符串。注意:C++里字符串结尾是\0,所以转换成字符串时长度为stringSize + 1。Index.ets文件向C++层传递string数据。将value转成字符串返回,注意C++里字符串结尾是\0,所以转换成字符串时长度为stringSize + 1。C++层获取string数据。

2024-07-23 21:31:17 710

原创 【鸿蒙实战开发】基于原生能力的压缩与解压缩能力

场景一:压缩与解压rawfile目录下的文件,由于在resource/rawfile目录下存放的文件,没有对外暴露的沙箱路径,无法使用文件管理接口或以沙箱路径形式处理,因此需要将rawfile下文件通过fs拷贝进沙箱目录下,再使用 zlib 进行压缩与解压。场景二:压缩与解压resfile下的文件,通过getContext().resourceDir获取到该路径下的文件,再使用zlib进行压缩与解压。当前鸿蒙暂无native的压缩与解压接口,本文主要介绍native侧通过zlib实现压缩与解压。

2024-07-23 20:59:02 1048

原创 【鸿蒙实战开发】基于AVPlayer的视频播放

stopped:停止状态,在prepared/playing/paused/completed状态调用stop()方法,AVPlayer会进入stopped状态,此时播放引擎只会保留属性,但会释放内存资源,可以调用prepare()重新准备,也可以调用reset()重置,或者调用release()彻底销毁。示例场景:AVPlayer播放视频ArkTS实现,创建AVPlayer,设置播放资源和窗口,设置播放参数,播放控制(播放/暂停/跳转),重置,销毁资源,播放完成后切换视频。

2024-07-23 20:31:27 1205

原创 【鸿蒙实战开发】基于OHAudio的音频操作

场景:基于OHAudio模块实现音频录制和播放功能,带监听音频打断实现使用OH_AudioCapturer接口录制音频生成PCM文件写入到文件保存到沙箱路径,再使用OH_AudioRenderer接口播放音频文件,并监听音频打断。AudioCapturer :音频采集,用于录制PCM音频数据。AudioRenderer :音频渲染,用于播放PCM音频数据。Step2:构造录制音频流,设置音频流参数和音频回调函数。Step1:构造播放音频流,设置音频流参数和音频回调函数。

2024-07-23 18:05:24 621

原创 【鸿蒙实战开发】基于Asset下的高安全级别数据存储

用户在金融类应用中查看银行卡号,这个时候需要核实用户的身份是否是本人。因此这个时候我们可以把银行卡号存入ASSET中,同时设置访问银行卡号需要进行身份验证。用户想查看银行卡号,应用必须请求用户身份认证(人脸、指纹、锁屏密码),校验通过后才能访问,提升了用户的安全体验。存储的信息只有在指纹认证之后才能进行访问。preQuery参数列表query参数列表postQuery参数列表首先得确认手机是否设置了指纹,锁屏密码和人脸。否则会报12500010错误,表示还没有录入凭据(指纹,人脸,密码)

2024-07-23 17:12:18 410

原创 【鸿蒙实战开发】Fabric 自定义组件开发指南

创建一个 Fabric 组件需要实现以下的代码:ComponentInstance:ComponentInstance文件是该自定义组件所有的逻辑集合,也是自定义组件主要需要实现的部分,简单理解就是,一个自定义组件文件对应一个ComponentInstance。Package文件:作用是声明创建该自定义组件的声明,指定创建Instance时会根据Packeage文件内的名称对应,从而生成对应的Instance对象。

2024-07-23 15:48:00 443

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除