![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
移动开发
文章平均质量分 93
CTrup
这个作者很懒,什么都没留下…
展开
-
【鸿蒙实战开发】基于关系型数据库的数据持久化
使用全文检索时,创建FTS表需要使用CREATE VIRTUAL TABLE语句,执行全文搜索需要使用MATCH关键字,当前HarmonyOS关系型数据库并没有直接提供相关接口,但是数据库底层是支持的,因此可以通过executeSql、querySql执行相关SQL语句。在数据库的使用过程中,数据库可能会因为数据丢失、数据损坏、脏数据等而不可用情况,为了预防这种情况,可以通过backup接口,提前备份数据库数据到本地文件中,当发生意外后,可以通过restore接口,从指定的数据库备份文件恢复数据库。原创 2024-09-12 16:22:37 · 0 阅读 · 0 评论 -
【鸿蒙实战开发】基于webview的Picker拉起
调用web的onShowFileSelector事件响应用户在h5侧写入的“选择文件”按钮,并使用文件选择器对象DocumentViewPicker的select方法,通过选择模式拉起documentPicker界面选择文件。调用web的onShowFileSelector事件响应用户在h5侧写入的“选择文件”按钮,并使用图库选择器对象PhotoViewPicker的select方法,通过选择模式拉起photoPicker界面选择图片。场景一:在web页面实现文件和图片上传。2.构建第一个ArkTS应用。原创 2024-09-11 22:06:59 · 791 阅读 · 0 评论 -
【鸿蒙ArkUI实战开发】基于RichEditor的评论编辑
使用RichEditor的属性customKeyboard控制切换系统键盘还是自定义键盘,添加表情使用addImageSpan,删除内容使用deleteSpans,并通过获取光标所在位置进行删除。原创 2024-09-11 21:23:25 · 606 阅读 · 0 评论 -
【鸿蒙实战开发】基于动态配置签名的多人协同开发应用签名解决方案
通过在hvigorfile.ts里使用函数方法,动态配置签名材料。//工程级别hvigorfile.tsconfig: {ohos: {signingConfig: getSigningConfig(), //签名配置对象appOpt: {} //app.json中的内容return {return "1";}``原创 2024-09-11 20:40:05 · 289 阅读 · 0 评论 -
【鸿蒙实战开发】基于原生实现高级显示效果
这种方案实现的跑马灯效果能力更强,可塑性更强,但是注意使用Marquee组件试下的时候不宜在页面中使用过多,该组件存在一定的性能问题,不建议在一个页面中使用超过四个。这种方案实现的跑马灯效果没有性能问题,但是没有Marquee那样提供了各种回调,如果没有复杂的效果并且需要在页面中大量使用的时候建议使用这一种。使用linearGradient与blendMode结合实现文字渐变效果,在结合动画来实现滚动的效果。10.后台任务(Background Task)管理。1.Ability开发。原创 2024-09-11 17:40:26 · 467 阅读 · 0 评论 -
【鸿蒙实战开发】基于HAR的跨模块C++头文件引用
多个模块使用同一份C++代码是App开发中很常见的问题,比如多个模块使用同一个自研的加解密库、集成三方开源SO库暴露其中的C++代码等。注意事项:双冒号前面指的是srcHar/oh-package.json5配置中的name,双冒号后面跟着的是步骤2中srcHar中对外导出的的so库名称,名称必须要一致。4、 在desHar的CMakeLists.txt声明so库的依赖。5、在desHar的cpp源码中使用 srcHar提供的C++方法。1、将需要导出的C++头文件放至srcHar模块下的固定目录。原创 2024-09-11 17:02:25 · 526 阅读 · 0 评论 -
【鸿蒙实战开发】基于CameraKit对相机进行操作
1.在开发相机应用时,需要先申请相机相关权限。2.创建一个相机设备,应用通过调用和控制相机设备完成拍照基础操作。3.创建一个相机会话,在会话中可以进行相机的输入流和输出流,添加闪光灯、调整焦距等配置。4.创建输出流,相机开发模型为Surface模型,即应用通过Surface进行数据传递,通过ImageReceiver的surface获取拍照流的数据、通过XComponent的surface获取预览流的数据进行预览。如果要实现双路预览可将拍照流改为预览流。5.获取拍照返回的图片并显示出来。原创 2024-09-11 16:44:04 · 880 阅读 · 0 评论 -
【鸿蒙实战开发】har和hsp的转换
2.(可选)当Hsp需要对外声明router可跳转的page时,需要添加module.json5的"pages"字段,并在resources/base目录下建立profile/main_pages.json文件,添加配置参考如下,并在对应位置添加页面。4.har包的build-profile.json5默认会有"consumerFiles": ‘./consumer-rules.txt’ ,该项仅har模块可配置,为默认导出的混淆规则(详细描述见: 代码混淆 ),需将其删除。6.三方应用调用管控机制。原创 2024-09-11 16:03:52 · 469 阅读 · 0 评论 -
【鸿蒙ArkUI实战开发】基于原生的水印添加能力
使用cameraPicker拉起系统相机拍照,拿到返回的picker.PickerResult.resultUri后使用fs.openSync读出图片文件转化为pixelMap,使用image组件渲染在页面上,在保存图片的时候通过drawing.TextBlob.makeFromString方法绘制水印后保存。第二步:使用image.createImageSource方法创建图片资源,在使用OffscreenCanvasRenderingContext2D.drawImage方法绘制图片在离屏画布上。原创 2024-09-11 15:17:35 · 1023 阅读 · 0 评论 -
【鸿蒙ArkUI实战开发】基于webView的嵌套滚动
实现方法:通过web组件的type属性设置为1,即全量展开且嵌套滚动场景,并且layoutMode接口用来设置web页面是否全量展开,如需全量展开则设置参数为WebLayoutMode.FIT_CONTENT,nestedScroll接口用来设置web组件与上下层组件的嵌套滚动关系,推荐使用子组件优先模式(NestedScrollMode.SELF_FIRST)。整体实现效果为:页面整体为一个Scroll,Scroll中嵌套一个Tabs组件,Tabs里有多个web组件可以实现首页效果。原创 2024-09-11 14:25:30 · 772 阅读 · 0 评论 -
【鸿蒙ArkUI实战开发】基于tabs实现页面布局
在页面布局过程中,Tabs可以将产品包含的所有内容进行清晰分类,一目了然地呈现应用的内容范围,方便概览与跳转场景一:tab嵌套list的吸顶效果场景二:tabbar样式自定义:1、tabs切换、监听2、样式自定义3、tabbar尾端文字渐变场景三:tabContent切换动画方案一:实现思路:1、最外层为tabs组件,首页tabContent主要用的stack组件嵌套了scroll组件+导航输入框组件,其中scroll组件嵌套了tabs组件,tabs里面嵌套list组件。2、外层的滚动组件scroll主要通原创 2024-09-11 13:48:34 · 475 阅读 · 0 评论 -
【鸿蒙ArkUI实战开发】基于bindSheet的半模态弹窗
半模态转场通过bindSheet属性为组件绑定半模态页面,在组件插入时可通过设置自定义或默认的内置高度确定半模态大小。原创 2024-09-10 21:45:14 · 707 阅读 · 0 评论 -
【鸿蒙实战开发】基于原生能力的横竖屏旋转适配
我们如何通过传感器自己感知方向,自己设置旋转;视频播放的过程中,用户可能在竖屏状态下,通过点击最大化按钮将视频变为横屏播放。竖屏,允许横竖屏,仅竖屏,仅横屏;调用窗口的Orientation设置方向即可,具体的设置窗口的显示方向,属性设置参考下表;:在一个应用内,不同的页面有不同的旋转策略;在一个应用内,不同的页面有不同的旋转策略;Q1:如何感知系统的自动旋转开关:如果是开的,app页面内适配?本文的旋转策略是:旋转策略是指当前页面支持的设备旋转方向。第三步:结合全局埋点的能力,实现不同页面的旋转适配。原创 2024-09-10 21:17:02 · 777 阅读 · 0 评论 -
【鸿蒙实战开发】基于原生能力的跨应用跳转
准备被拉起方的app信息,其中目标app的图标需要拉起方应用自己准备。uri字段规格详见文末的常见问题Q1。在弹窗显示之前判断应用是否已安装,在弹窗中显示已安装的应用,并实现点击跳转到该应用。场景一:支付时商户根据实际情况去判断,拉起支付应用还是h5页面。场景二:分享场景与支付场景,需要列出多个用户可跳转的应用。10.后台任务(Background Task)管理。2.支付应用不存在,拉起h5页面进行支付。1.支付应用存在,拉起支付应用。添加按钮,点击出现支付应用列。2.构建第一个ArkTS应用。原创 2024-09-10 20:36:05 · 831 阅读 · 0 评论 -
【鸿蒙实战开发】基于AVCodecKit的音视频解码及二次处理播放
首先导入选择器picker模块,使用PhotoViewPicker方法拉起图库选择视频文件,将视频文件传递到native侧使用Demuxer解封装器进行解封装,再使用OH_VideoDecoder进行解码(surface模式)送显播放。Step1:导入picker模块(仅代表选择一个视频路径,还有其它获取媒体文件的方式), 拉起图库选择视频文件保存到自定义路径。Step3:使用AVDemuxer接口对文件进行解封装获取视频流数据。Step3:开始解封装,循环获取视频帧数据。6.三方应用调用管控机制。原创 2024-09-10 17:51:31 · 581 阅读 · 0 评论 -
【鸿蒙实战开发】基于AudioRenderer音频播放
AudioRenderer是音频渲染器,用于播放PCM(Pulse Code Modulation)音频数据,相比AVPlayer而言,可以在输入前添加数据预处理,更适合有音频开发经验的开发者,以实现更灵活的播放功能。使用AudioRenderer播放音频涉及到AudioRenderer实例的创建、音频渲染参数的配置、渲染的开始与停止、资源的释放等。select提供下拉选择菜单,可以让用户在多个选项之间选择,和text组件一起使用就可以实现让用户自由选择配置信息的能力,这里以采样率下拉菜单为例子。原创 2024-09-10 17:23:23 · 778 阅读 · 0 评论 -
【鸿蒙实战开发】基于napi_load_module_with_info实现的napi调用arkts的接口
napi_load_module_with_info接口的功能是进行模块的加载,当模块加载出来之后,可以使用函数napi_get_property获取模块导出的变量,也可以使用napi_get_named_property获取模块导出的函数,该函数可以在新创建的ArkTs基础运行时环境中使用原创 2024-09-10 16:50:58 · 608 阅读 · 0 评论 -
【鸿蒙实战开发】基于Drawing的图形/文字绘制及双缓冲模拟实现刷新
支撑用户设置排版风格和文本风格,可调用OH_Drawing_TypographyHandlerAddText添加文本并调用OH_Drawing_TypographyLayout和OH_Drawing_TypographyPaint对文本进行排版和绘制。支撑具备自排版能力的用户将排版结果构造为OH_Drawing_TextBlob并调用OH_Drawing_CanvasDrawTextBlob绘制OH_Drawing_TextBlob描述的文本块。此步骤需要在napi_init的过程中处理。原创 2024-09-10 16:00:07 · 772 阅读 · 0 评论 -
【鸿蒙实战开发】基于C++能力的资源访问
开发过程中可能需要在native侧实现资源访问,应用经常会遇到如下的业务诉求:场景一:c++访问公共目录的文件图片等资源(图库和文管)场景二:c++访问沙箱文件/图片等资源场景三:c++访问应用包里的文件/图片资源 rawfile和resource原创 2024-09-10 15:28:51 · 626 阅读 · 0 评论 -
【鸿蒙实战开发】基于ohpm的.ohpmrc仓库访问配制
这意味着当用户在浏览网站或进行加密通信时,可以通过验证证书的CA证书来确保所使用的证书是合法和受信任的。在配置私仓过程中经常会因为配置问题访问不到中心仓或者私仓,或者在访问过程中超时报错,本篇文章主要讲解.ohpmrc文件的内外网配置,以及代理配置,还有对应的公私秘钥生成ca证书。2.登录 ohpm-repo 私仓管理地址,单击主页右上角的个人中心,新增公钥,将公钥文件(.pub)的内容粘贴到公钥输入框中。4.将复制的发布码配置到.ohpmrc文件中,以及配置私仓位置。原创 2024-09-10 14:36:23 · 505 阅读 · 0 评论 -
【鸿蒙实战开发】基于自定义注解和代码生成实现路由框架
由于TS语言特性,当前只能使用自定义装饰器使用@AppRouter装饰器来定义路由信息。原创 2024-09-10 13:55:01 · 1097 阅读 · 0 评论 -
【鸿蒙ArkUI实战开发】基于原生能力的深色模式适配
不通过两套图片资源的方式,也可以实现深浅色模式适配(补充:通过两套图片资源的方式也可以实现,修改svg图片中fill属性的颜色,然后将两张图片分别放置在不同的目录下)值得一提的是,barContentColor并不支持使用$r的方式加载颜色资源的key值,它是一个string类型的,因此,这里的是不是暗夜模式就要开发者自己去写代码判断。采用资源限定词目录的方式,自定义两套资源(resources/dark/media和resources/base/media),通过$r的方式加载颜色资源的key值。原创 2024-09-09 21:51:33 · 1053 阅读 · 0 评论 -
【鸿蒙ArkUI开发】基于ArkUI的验证码实现
1.写一个TextInput将其隐藏,给TextInput设置id后,在Text的点击事件中通过sendEventByKey方法将TextInput的点击事件转移到Text上,这样就可以点击Text拉起软键盘。:基于自定义键盘的验证码实现,进入页面后直接输入验证码,第一个验证码输入完后可自动跳到下一个,拉起的键盘是自定义数字键盘,验证码的输入框带选中效果。基于自定义键盘的验证码实现,进入页面后直接输入验证码,第一个验证码输入完后可自动跳到下一个,拉起的键盘是自定义数字键盘,验证码的输入框带选中效果。原创 2024-09-09 21:18:23 · 723 阅读 · 0 评论 -
【鸿蒙ArkUI实战】基于ImageKit对图片进行处理
format为图像的编码格式;quality为图像质量,范围从0-100,100为最佳质量。在ts侧传入pixelmap和文件fd到native侧。10.后台任务(Background Task)管理。创建图像编码ImagePacker对象。为了解决大家这些学习烦恼。2.构建第一个ArkTS应用。设置编码输出流和编码参数。6.三方应用调用管控机制。8.学习ArkTS语言。1.Ability开发。12.设备使用信息统计。创建编码器实例对象。原创 2024-09-09 20:43:07 · 567 阅读 · 0 评论 -
【鸿蒙性能优化】基于measure实现的文本测量
搜索框展示历史记录,单个子组件超过固定长度后展示省略号,固定只展示两行,超出的文字被截断,通过点击按钮展示后续文本内容。搜索框展示历史记录,单个子组件超过固定长度后展示省略号,固定只展示两行,超出的文字被截断,通过点击按钮展示后续文本内容。2、测量两行文本和全部文本的高度,当全部文本的高度超过两行文本的高度时进行展开的逻辑。展开,当所有文本展开后,最后面跟着收起。展开,当所有文本展开后,最后面跟着收起。3、文本全部展开后,点击收起,所有文本全部收齐变成固定的两行。12.设备使用信息统计。原创 2024-09-09 17:29:01 · 680 阅读 · 0 评论 -
【鸿蒙性能优化】基于Camera Kit,获取相机流数据传递给native,进行压缩编码
3:编码使用的是buffer模式,编码过程分为创建编码器实例对象 --> 设置编码器回调函数 --> 启动编码器,开始编码 --> 写入编码码流 -->将数据推入编码器的输入队列中进行编码 --> 编码完成通知编码器码流结束 --> 输出编码帧 --> 销毁编码器实例,释放资源。:ATS侧启动相机,使用摄像头采集视频流数据,获取相机视频流数据传递到native侧,通过buffer模式将视频编码成MP4文件保存到沙箱路径。: 启动录制,获取视频流数据,获取一帧图像转成JPG格式保存到沙箱路径。原创 2024-09-09 16:42:43 · 1112 阅读 · 0 评论 -
【鸿蒙性能优化】基于原生能力的设备唯一ID方案
3.将账号密码保存到asset中,读取的时候查询数据库中是否含有ID和Alias,如果没有说明是新设备则弹窗进行信任,信任成功时将id存入进去,如果已经登录过就不用进行弹窗信任,直接展示存入的容。卸载应用,重新安装,我们可以重新登入并且可以看到原来存储的数据且不会弹窗,说明账号以及id都存在,实现了持久化存储。如果需要保持应用在卸载时保证设备ID的持久化,则可用Asset Store Kit(关键资产存储开发服务)包含了关键资产存储服务开放的接口能力集合,提供了用户短敏感数据的安全存储及管理能力。原创 2024-09-09 16:03:16 · 1062 阅读 · 0 评论 -
【鸿蒙性能优化】基于AOP的代码插桩
方案:通过Aspect.addBefore对自定义方法进行执行前插桩记录方法调用前时间、Aspect.addAfter对自定义方法进行执行后插桩记录执行后时间,以统计方法耗时及调用次数。原创 2024-09-09 15:33:28 · 1050 阅读 · 0 评论 -
【鸿蒙性能优化】横竖屏切换开发实践
在旋转过程绘制中,由于生成文字缓存非常耗时图形所以会把文字转成图片,但是如果该页面上的文字使用了零宽字符,会导致每个字符被转成图片,会带来额外的绘制负载。具体的实现逻辑在windowUtil中,在调用屏幕旋转方向时,可以通过windowStage拿到对应的window实例,并设置旋转setPreferredOrientation。如果当前旋转页面存在一些图片,未经合理的裁剪,图片过大,可以对图片设置AutoResize属性,使图片裁剪到合适的大小进行绘制。以下是简化后的示例代码,可直接运行参考使用。原创 2024-09-09 14:46:13 · 996 阅读 · 0 评论 -
【鸿蒙性能优化】冷启动响应时延问题分析思路&案例
冷启动响应时延推荐时间:85ms。原创 2024-09-09 14:29:03 · 642 阅读 · 0 评论 -
【鸿蒙性能优化】基于ArkUI启动冷启动过程最大连续丢帧数问题分析思路&案例
冷启动过程最大连续丢帧数的预期为动效环节0帧,加载环节6帧。冷启动过程只涉及动效环节。不同过程可能有差异,具体以测试标准为准。冷启动过程最大连续丢帧数即在冷启动过程中的最大连续丢帧数,其性能衡量的起点为用户点击应用图标离手帧时间,止点为应用启动页图标铺满屏幕的首帧时间。原创 2024-09-09 14:04:21 · 794 阅读 · 0 评论 -
【鸿蒙性能优化】基于List的滑动过程卡顿率问题分析&案例
以大于300mm/s的速度,连续3次,每次半屏。List组件的抛滑过程,可以通过应用进程下的H:APP_LIST_FLING泳道标识。性能衡量的起点为第一次抛滑开始点,衡量的结束点为第三次抛滑的结束点。Tip:尾动效阶段系统会进行降帧处理,所以如果统计卡顿率的情况,通常只会统计从抛滑开始到尾动效起点的这一阶段。原创 2024-09-08 22:15:25 · 821 阅读 · 0 评论 -
【鸿蒙性能优化】基于ArkUI的冷启动加载完成时延问题分析思路&案例
冷启动加载完成时延的性能衡量的起点:点击应用图标离手冷启动加载完成时延的性能衡量的终点:应用的首页所有的占位符加载完成。原创 2024-09-08 21:48:26 · 907 阅读 · 0 评论 -
【鸿蒙实战开发】关于图像撕裂、掉帧等异常现象的原理以及优化方案
另外也可以看出来期间存在CPU资源浪费,双缓冲只会提供两个Buffer,B被GPU处理占用,A正在用显示,那么在第二个16ms里面,CPU就无法获取到Buffer处理UI更新,在Jank的阶段空空等待。GPU 开辟A、B两个缓冲区,并对缓冲区进行同步加锁处理,执行流程就是当A缓冲区拿到第一帧数据,就给A缓冲区加上一把锁,屏幕控制器从A拿到数据并逐行扫描完成,A帧缓冲区解锁,并把屏幕控制器指向B缓冲区,B缓冲区加锁并逐行扫描显示,在屏幕控制器扫描B缓冲区的时候,A缓冲区拿到GPU传过来的新数据,以此类推。原创 2024-09-08 21:26:53 · 834 阅读 · 0 评论 -
【鸿蒙实战开发】折叠屏扫描二维码方案
本示例介绍使用自定义界面扫码能力在折叠屏设备中实现折叠态切换适配。自定义界面扫码使用系统能力customScan,其提供相机流的初始化、启动扫码、识别、停止扫码、释放相机流资源等能力。折叠屏折叠状态通过监听display的foldStatusChange事件实现。原创 2024-09-08 20:39:00 · 755 阅读 · 0 评论 -
【鸿蒙实战开发】图片选择和下载保存案例
本示例介绍图片相关场景的使用:包含访问手机相册图片、选择预览图片并显示选择的图片到当前页面,下载并保存网络图片到手机相册或到指定用户目录两个场景。2.通过photoViewPicker.select()接口,通过传入参数PhotoSaveOptions图库对象,获取返回的用户选择的图片信息。通过photoViewPicker.select()拉起图库界面,用户可以预览并选择一个或多个文件,即可实现拉起手机相册并进行图片的预览与选择。1.创建文件类型为图片的,并最大预览数量为2的图库实例。原创 2024-09-08 20:15:44 · 856 阅读 · 0 评论 -
【鸿蒙实战开发】基于加解密算法框架的常见规格问题
对于加解密在HarmonyOS和安卓相互转换,以及HarmonyOS、安卓互调的各种场景下使用密文密钥的问题。原创 2024-09-07 21:55:44 · 862 阅读 · 0 评论 -
【鸿蒙实战开发】Native保存图片到应用沙箱
当前编译后加载libcurl.so时,通过hilog日志发现依赖了libcurl.so libcurl.so.4 libnghttp2.so libnghttp2.so.14 libzstd.so几个so文件。5.在Native的saveImageOfInternetCallback接口中通过调用libcurlDownload.so的接口将网络图片写入沙箱。2.将开源库libcurl相关的so文件以及封装了libcurl下载功能的libcurlDownload.so放入模块下的libs相应目录。原创 2024-09-07 21:37:06 · 1062 阅读 · 0 评论 -
【鸿蒙UI实战开发】基于ArkUI现有能力实现自定义弹窗封装方案
从下往上的抽屉式弹出、关闭时从上往下收回。原创 2024-09-07 20:37:48 · 771 阅读 · 0 评论 -
【鸿蒙UI实战开发】基于子窗口实现应用内悬浮窗
app应用会使用悬浮窗/悬浮球的方式来给用户展示一些应用重要&便捷功能的入口,类似android和iOS应用中常见的应用内可拖拽的悬浮球和小窗口视频悬浮窗,点击悬浮窗修改悬浮窗样式和响应事件跳转页面,在跳转页面后依然可以显示在屏幕中上个页面拖拽后的固定位置等。:可响应正常点击事件,可通过触发拖动使悬浮窗的移动,根据最后手势停留位置,做动画靠屏幕左或靠右显示,跳转和返回上级页面后悬浮窗依然存在,且相对手机屏幕位置不变。:悬浮窗的窗口大小自适应组件,子窗口中页面设置了宽高,需要让子窗口自适应页面组件大小。原创 2024-09-07 20:19:03 · 726 阅读 · 0 评论