独立开发实战:用 ArkUI 做了一个鸿蒙原生的慢性病记录 App「健康手账」

工业互联网工控安全与工业质检AI大模型建设方案.pptx 立即下载

起因:我妈的血压数据全靠"感觉"

早上七点,我妈量完血压,把袖带一扔就去厨房忙了。数据?没记。到了月底复诊,医生问"最近血压怎么样",她只能说"还行吧,偶尔高一点"。这个"偶尔"到底是几次、高到多少、吃药有没有漏——全凭感觉。

我之前在 iOS 端做了一个叫「健康手账」的 App 来解决这个问题:让记录足够快,让趋势一目了然,让用药别再靠记忆。今年我决定把它做成 HarmonyOS 原生版本,这篇文章记录一下技术选型、ArkUI 实现以及从 iOS 迁移过来的真实体验。

为什么选择鸿蒙原生而不是套壳

家里长辈用华为手机的比例远超我预期。后台反馈里"什么时候出安卓版"的留言排第一,而这些用户大多数拿的是 Mate 60、nova 系列。既然鸿蒙生态已经跑起来了,与其套壳不如做原生,把分布式能力和原子化服务用上,体验会完全不一样。

一个具体的例子:iOS 版依赖 Apple Watch 做血压趋势通知,迁移到鸿蒙后我用了分布式数据管理配合华为穿戴设备,数据在手机、平板、手表之间自动同步,不用手动导入导出。这比 iOS 上 HealthKit 的单向同步链路灵活得多。

ArkUI 声明式实现:血压分级卡片

记录页的核心交互是"输入数字 → 立刻看到分级色块"。在 ArkUI 里用声明式 UI 写这个逻辑很自然,状态驱动视图刷新不需要手动 reload。下面是血压自动分级卡片的核心实现:

@Component
struct BPGradeCard {
  @State systolic: number = 0
    @State diastolic: number = 0
  get gradeColor(): ResourceColor {
      if (this.systolic >= 180 || this.diastolic >= 110) return '#FF3B30'
          if (this.systolic >= 140 || this.diastolic >= 90) return '#FF9500'
              if (this.systolic >= 130 || this.diastolic >= 85) return '#FFCC00'
                  return '#34C759'
                    }
  build() {
      Column() {
            Text(`${this.systolic}/${this.diastolic} mmHg`)
                    .fontSize(28)
                            .fontColor(this.gradeColor)
                                  Text(this.getGradeLabel())
                                          .fontSize(14)
                                                  .margin({ top: 4 })
                                                      }
                                                          .padding(16)
                                                              .backgroundColor('#1A' + this.gradeColor.toString().slice(1))
                                                                  .borderRadius(12)
                                                                    }
                                                                    }
                                                                    ```
对比 iOS 端 SwiftUI 的实现,ArkTS 的声明式写法上手很快。区别在于布局单位和资源引用方式,但思维模型几乎一致,迁移成本比我预想的低。

## 用药提醒:后台代理提醒 + 依从率统计

用药提醒用了 HarmonyOS 的后台代理提醒(reminderAgentManager),好处是 App 被杀掉后提醒依然准时触发,不像 iOS 本地通知那样在某些机型上被系统节能策略吞掉。

依从率的计算逻辑是:实际服药打卡次数 / 应服药次数 × 100%。我把统计周期做成了 7 天、30 天、90 天三档,长辈复诊时直接给医生看截图就够了。首页用一个环形进度卡片展示这个数据,家属一眼就能看到老人这周吃药是否规律:

```arkts
@Component
struct AdherenceRing {
  @Prop rate: number  // 0-100
  build() {
      Stack() {
            Circle()
                    .width(80).height(80)
                            .stroke('#E0E0E0')
                                    .strokeWidth(8)
                                          Circle()
                                                  .width(80).height(80)
                                                          .stroke(this.rate >= 80 ? '#34C759' : '#FF9500')
                                                                  .strokeWidth(8)
                                                                          .strokeDashArray([this.rate * 2.51, 251])
                                                                                Text(`${this.rate}%`)
                                                                                        .fontSize(18)
                                                                                                .fontWeight(FontWeight.Medium)
                                                                                                    }
                                                                                                      }
                                                                                                      }
                                                                                                      ```
## 原子化服务卡片:比 iOS Widget 更适合健康记录

鸿蒙的原子化服务卡片(Service Widget)是我觉得这个项目里最值得聊的能力。iOS 的 WidgetKit 本质是只读展示,交互极其有限;而鸿蒙的服务卡片支持点击区域直接跳转到对应的录入页面,还能在卡片上显示今天的最新一条血压数据和分级状态。

对于我妈这种"量完就想赶紧记一下"的用户,桌面长按 → 看到当前血压状态 → 点一下就进录入页,三秒搞定,不用翻 App 列表。这个交互路径的缩短在健康记录场景里价值很大。

## 家庭多档案与 PDF 报告导出

一个家庭里通常不止一个人需要监测。我做了多档案切换,数据完全隔离。PDF 报告导出功能在鸿蒙端用了系统的文件分享能力,生成后可以直接通过畅连、微信分享给远在外地的子女,或者复诊时用华为分享投到医生的平板上。

## 从 SwiftUI 到 ArkUI:迁移体验实话实说

**上手速度**:有 SwiftUI 经验的话,ArkUI 的声明式写法大概一周能写出完整页面。状态管理的 @State/@Prop/@Link 三件套和 SwiftUI 的 @State/@Binding/@ObservedObject 思路相似。

**布局差异**:ArkUI 没有 GeometryReader 这种灵活但容易写乱的东西,Row/Column/Stack 的嵌套逻辑更直白。我个人觉得在复杂列表页上 ArkUI 比 SwiftUI 的 LazyVStack 更好调试。

**生态能力**:分布式数据、后台代理提醒、服务卡片这三项在健康管理场景里确实好用。iOS 要实现类似功能得组合 CloudKit + UNNotification + WidgetKit,链路更长,限制更多。

**不足**:第三方库生态还在建设中,图表组件我最终自己画的,没有找到成熟度对标 iOS Charts 的库。不过 ArkUI 的 Canvas API 够用,自己画反而更可控。

## 当前状态和后续计划

「健康手账」鸿蒙版目前已经在我家里三台设备上跑了两个月,数据同步稳定,提醒没漏过。接下来计划适配华为健康穿戴数据的自动导入。

项目里还有一些细节,比如趋势图的异常点标注算法、标签关联洞察(吃了某种药后血压变化趋势)的实现思路,后续可以单独写一篇。

如果你也在做鸿蒙开发,特别是 Health Kit 对接相关的,欢迎评论区交流。也可以搜「健康手账」体验一下。

#HarmonyOS开发 #ArkUI实战 #鸿蒙原生应用 #健康管理 #独立开发
2024 《计算机网络》实验教学指导书.doc 立即下载

相关推荐

不平衡电网下自抗扰顺序模型预测PWM整流器控制仿真模型(Simulink仿真实现)

内容概要:本文围绕面向城市空中交通的多无人机路径规划问题展开研究,提出了一套融合全局规划、动态避障与局部协同调整的综合路径规划方法。研究内容涵盖基于改进RRT算法与图论的全局路径规划、基于动态风险场和动态窗口法(DWA)的模型预测控制实现动态避障,以及基于分布式协同控制的多无人机局部路径协同策略。通过Matlab平台构建仿真环境,在多种典型城市交通场景下对所提方法进行了系统性验证,结果表明该方法在路径安全性、编队稳定性与任务效率方面表现优异。文章还深入探讨了算法的创新点与未来研究方向,为复杂城市环境下多无人机系统的自主协同提供了理论支撑与技术路径。; 适合人群:具备自动化、控制理论、计算机科学或相关领域基础知识,从事无人机系统、智能交通、路径规划、多智能体协同控制等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①为城市空中交通系统中的多无人机安全、高效飞行提供可靠的路径规划解决方案;②支持在复杂、动态的城市场景中开展无人机自主导航、编队飞行与协同控制的技术研究与仿真验证。; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点关注算法的具体实现细节、参数配置对性能的影响以及不同仿真场景下的实验设计,以深入理解各模块的集成逻辑与实际应用效果。

React Native鸿蒙基于 HarmonyOS API 24 React Hooks实现,这种轻量级的状态管理方式完美适配React Native的跨端生命周期模型

在医疗健康领域的跨端应用开发中,慢性病管理类应用对数据准确性、功能完整性和跨平台兼容性均有极高要求。本文将深度拆解基于React Native开发的慢性病管理应用代码,从领域数据模型设计、状态管理逻辑、UI组件适配到鸿蒙系统跨端兼容的核心技术要点,全方位剖析医疗级跨端应用的开发范式与最佳实践。这款慢性病管理应用聚焦于糖尿病、高血压等慢性疾病的全周期管理,涵盖用户健康档案、个性化饮食/运动/用药方案管理、健康报告自动推送等核心功能。从架构层面来看,整个应用严格遵循React Native的组件化设计思想,以T

2401_86113894的博客 440

大华摄像头GB28181协议接入EasyCVR全流程(附常见错误排查)

本文详细阐述了大华摄像头通过GB28181协议接入EasyCVR视频管理平台的全流程,涵盖从核心原理、前期参数规划、Web界面配置到平台侧验证的完整步骤。重点针对网络端口、SIP参数配置等关键环节提供了深度排错指南,并总结了设备无法注册、在线不稳定、拉流失败等常见问题的排查思路与解决方案,旨在帮助安防工程师与系统集成商高效完成设备接入与调试。

weixin_29279153的博客 307

React Native鸿蒙跨平台完成基于React Hooks(useState、useEffect)实现,HarmonyOS API 24 适配React Native的跨端生命周期模型

在下面来自 James Knight 网站(http://fuhm.net/super-harmful)的示例中,C 类使用。主要原因在于类的初始化。在 Python 中,基类不会在__init__()中被隐式地调用,所以。现在回到 super。如果使用了多重继承的层次结构,那么使用 super 是非常危险的,需要由开发人员来调用它们。()调用,但这又会导致第一种错误。混用 super 与显式类调用。

2401_86113894的博客 312

手机Camera硬件电路设计:从电源管理到信号完整性的实战解析

本文深入解析了手机Camera硬件电路设计的核心挑战与实战经验,重点聚焦于电源管理与信号完整性两大基石。文章详细阐述了AVDD、DVDD、IOVDD和AFVDD四路电源的差异化设计要点与噪声控制策略,并剖析了MIPI等高速信号通道的完整性设计原则,为硬件工程师提供了从理论到PCB布局布线的完整实战指南。

weixin_28308325的博客 248

用AI助手Cursor轻松自动生成流程图

通过 Cursor + Mermaid,我们可以快速、准确地自动生成流程图,上面演示的例子部分流程图可能比较丑,我们可以通过流程图软件导入Mermaid代码,然后手动进行微调就可以了,如果你对美观要求不是特别多,可以直接用,这将极大地提升代码可视化和架构设计的效率。

呱牛 Just do IT 1936

iOS 多语言本地化教程,VS Code KXApp 编辑 String Catalog .xcstrings

做 iOS 多语言本地化总要在 VS Code 和 Xcode 之间来回切?这篇讲用 KXApp(快蝎)在 VS Code 里直接编辑 String Catalog(.xcstrings):双击打开和 Xcode 一样的表格,`.xcstrings` 与老的 `.strings`、`.stringsdict` 同表编辑,加语言同步登记到工程、从源码扫描同步新 key,复数、设备变体和变量占位都在表里处理,改源语言文本后已有翻译自动标需复核。文件仍是标准格式,回 Xcode 打开一致。

2501_91592143的博客 153

如何从Matlab工作区读取数据,并按时序将数据输入Simulink中

如何从Matlab工作区读取数据,并按时序将数据输入Simulink中 例如:一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 7 点—晚上9点 2、 周六上午 9 点-上午 11 点 3、 周日下午 3 点-下午 6 点 学习产出: 提示:这里统计学习计划的总量 例如: 1、 技术笔记 2 遍

weixin_44899540的博客 1万+

4G 功能机操作系统选型指南:KaiOS、Mocor、MAUI、PMAOS 的能力边界与验证方法

4G 功能机如何选择操作系统?本文梳理 KaiOS、Mocor、MAUI、PMAOS 四条路线的技术定位与能力边界,从市场认证、应用清单、芯片与 BSP、内存与整机成本、交付维护五个维度建立选型流程,并提供场景决策矩阵和签约前八项验证清单,帮助研发与产品团队区分平台宣称、演示能力与目标机型的实际交付能力。

PMAOS的博客 179

零基础做完YOLOv8船只检测系统:HRSC2016数据集 + 完整UI,稳过答辩

亲爱的同学,通过这篇教程,你已经掌握了“基于YOLOv8的HRSC2016微小船只检测系统”从数据集处理、模型训练到Tkinter界面开发的全流程。这个课题既贴合“海事智能化”的产业战略,又涵盖了“目标检测、深度学习、界面开发”等多个毕设评分点,非常适合作为计算机或海事工程专业的毕业设计。在实践中,你可能会遇到“海面背景复杂导致船只漏检”“微小船只识别精度不足”“UI与模型推理同步卡顿”等挑战——别担心,这些都是技术成长的必经之路。

FJN110的博客 107

2026年全国青少年信息素养大赛复赛真题(算法应用主题赛C++初中组:带解析)(7月4日试卷一)【文末附答案和解析】

2026年全国青少年信息素养大赛复赛真题(算法应用主题赛C++初中组:带解析)(7月4日试卷一)【文末附答案和解析】

王老师青少年编程 1732

芯参谋(83):AliOS Things_驱动开发指南

本指南针对AliOSThings驱动开发中的核心痛点,系统梳理了从硬件配置到组件交付的全流程。聚焦“初始化顺序”“分级加载”“CSI隔离”“VFS挂载”等关键问题,提供可照搬的八步开发流程、骨架代码与核查清单。通过明确驱动类型选择、组件化管理、板级静态配置(无DTS)及内核态/用户态运行模式,解决“驱动不注册”“open失败”“偶发死机”等典型难题。配套模板与实战案例,确保驱动可复现、可维护、可裁剪,适用于V3.x弹性微内核平台,助力开发者高效完成稳定可靠的外设驱动开发。

qq520131714的专栏 471

北斗导航 | 卫星信号捕获跟踪原理解析

卫星信号的捕获与跟踪是导航接收机的"眼睛",其性能直接决定定位精度、动态适应性和抗干扰能力。随着北斗三号全球组网完成,新一代接收机正朝着。两大核心阶段,二者共同构成定位的基础。调制,频谱主瓣宽度达4.092MHz,较传统BPSK调制抗干扰能力提升3dB[38]。的目标持续演进,在自动驾驶、精密农业等领域展现出巨大应用潜力。二维空间中搜索峰值相关能量[4]。卫星导航接收机对信号的处理可分为。北斗三号B1C/B2a信号采用。北斗三号新增的B1C信号采用。

尘世冰封的专栏 772

iOS 小组件开发,Windows 上用 KXBuild 加 WidgetKit 扩展 给 App 加 iOS 桌面小组件

iOS 小组件开发用 WidgetKit。这篇在 Windows 上用 KXBuild 的 add-target --type widget 给 SwiftUI 工程加一个桌面小组件扩展:写时间线和主屏小号/中号、锁屏圆形多种尺寸界面,用 App Group 和 App 共享数据,App 里调 WidgetCenter 主动刷新,按 F5 装到 iOS 17+ 的 iPhone 调试,再随 ipa 一起上架。以喝水打卡为例,附 App ID、描述文件准备和小组件不刷新、签名报错的排查。

2501_91600747的博客 180

UMI——斯坦福刷盘机器人:通过手持夹爪革新数据收集方式,且使用视觉SLAM和Diffusion Policy预测动作

没想到今年年初的斯坦福mobilealoha的热度刚过,而到今年2月的下旬,斯坦福另一个团队又推出了UMI刷盘机器人,且这两个团队还互相认识、还在一块共同切磋(顺带小小感叹一下,斯坦福的氛围是真好而且真高产)斯坦福UMI刷盘机器人其与mobile aloha(以及AirExo: Low-Cost Exoskeletons for Learning Whole-Arm Manipulation in the Wild)最大的不同在于其收集数据处理的非真实的机器人,而是一个手持夹持器(从而大幅降低成本)

u013250861的博客 1357

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

安卓IOS打包证书

.p12 、 .mobileprovision 、 keystore 相关证书申请

weixin_58431406的博客 271

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

React Native项目开发(iOS侧为例)

本文基于React Native 0.71+,通过npx react-native init初始化项目后,详细讲解如何使用TypeScript搭建两个页面:入口页(Entrance.tsx)和我的页面(Profile.tsx)。重点介绍了配置tsconfig.json、初始化TypeScript环境、集成React Navigation实现页面跳转,并通过创建共享类型文件(navigation.ts)实现路由类型安全。文章还涵盖依赖安装、iOS构建问题排查、目录结构规范及常见错误解决方案。

D_xw_的博客 231

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

iOS 推送通知怎么实现,从 APNs p8 密钥到 iOS 真机收到第一条推送

iOS 推送通知要跑通,核心是 App ID 开通 Push Notifications 并重新生成描述文件、签名带上 aps-environment、再用 APNs 的 .p8 密钥签 JWT 把推送发到设备令牌。这篇用 KXBuild 按五步做:开能力、加 entitlements、代码里请求权限拿设备令牌、建 .p8 认证密钥、用一段 Node 脚本或 curl 走 HTTP/2 发测试推送,让 iPhone 弹出第一条通知。附拿不到令牌、APNs 报错码、TestFlight 收不到的排查。

2501_91591841的博客 214

[iOS]Runtime2

为了让你在父类中依然能访问当前对象(也就是子类的实例),编译器在底层会生成一个结构体,叫 : 当调用 时,底层调用的函数是 : 拿着(也就是当前的子类对象)作为消息接收者,但是把方法查找的起点定位在了 (父类)这里需要注意的就是仍然是调用者自己,即先讲一下上篇没讲过的,我们如果缓存未命中,那我们就会进入慢速查找,现在我们来详细的讲解在进入慢速查找的瞬间会再看一遍方法列表,然后立刻调用加锁,因为多线程下别人正在动态添加方法或者扩容,不加锁会崩溃类就绪OC的机制就是在编译期只生成了 结构,当类首次被发送消息时(

wzm20070304的博客 210

React Native iOS 项目搭建

本文系统梳理了React Native iOS开发的环境检测与项目搭建全流程。强调环境问题占报错70%根因,需优先验证Node/npm、Watchman、Xcode工具链、模拟器运行时等关键项。通过官方CLI初始化项目,配合CocoaPods管理原生依赖,实现从环境验收到首跑成功的闭环。基于React Navigation构建双Tab嵌套导航,结合AsyncStorage实现本地持久化,完成用户列表、详情页、我的页等核心功能。最后提供调试技巧与高频报错解决方案,助力开发者高效落地RN项目。

D_xw_的博客 443

iOS App 图标、启动屏和多语言搭配 方法,上架前使用KXBuild一次做好 App 图标

上架前,iOS 的 App 图标、启动屏和多语言这三样配不齐,上传时就可能被拦或显示不对。这篇用 KXBuild 一次配好:图标只要一张 1024×1024、不带透明通道的 PNG,在资源目录编辑器里右键就生成全部尺寸,还支持 iOS 18 深色/着色和 Xcode 26 的 .icon;启动屏在 Info.plist 的 UILaunchScreen 填背景色和 Logo;界面文字、App 名称用 .xcstrings 翻译,商店信息再到 App Store Connect 按语言填。附上架前检查清单。

2501_91600889的博客 270

Appuploader 创建 iOS 描述文件详解,Development / Ad Hoc / App Store

搞不清 iOS 描述文件(Provisioning Profile)该选 Development、Ad Hoc 还是 App Store?本文讲清四种类型各装到哪、哪些要绑设备、能不能上架,重点辨析最容易混的 Development 与 Ad Hoc,说明设备或证书变动后为什么要重建、重建后要重新导入签名,并给出不用 Mac 在 Windows/Linux 上用 Appuploader 新建与重建描述文件的实操步骤,附装机"描述文件不匹配"等常见问题排查。

2501_91373349的博客 208

Windows 开发 iOS,Sign in with Apple 苹果登录,KXBuild 真机调试全流程

Sign in with Apple 接入分四步:App ID 开能力并重新生成描述文件,entitlements 加 com.apple.developer.applesignin,用 SignInWithAppleButton 拿 identityToken 交服务端验签,删账号时调 revoke。本文讲清审核指南 4.8 为什么要你提供它、姓名邮箱只给一次、用 user 当主键,并在 Windows 上用 KXBuild 真机测登录,附 1000 报错排查。

2501_91373349的博客 199

iOS 深度链接配置教程,URL Scheme 与 Universal Links,KXBuild 真机验证

深度链接两种:URL Scheme(myapp://)只改 Info.plist 的 CFBundleURLTypes;Universal Links(https://)要开 Associated Domains、在 entitlements 写 applinks 域名、网站放 /.well-known/apple-app-site-association。讲清两者怎么选、onOpenURL 处理代码,在 Windows 上用 KXBuild 装 Debug 包真机验证,附 CDN 缓存和十个不跳转排查。

2501_91600747的博客 256

手机远程控制电脑哪家强?2026年iOS/安卓/鸿蒙横评实测,ToDesk/向日葵谁更流畅

手机远程控制电脑已成刚需,ToDesk凭借全平台覆盖、低延迟、无广告、免费不限速等优势,成为最佳选择。其iOS、安卓、鸿蒙及Mac系统均支持,实测连接快、操作流畅,虚拟键盘、外接键鼠、互动批注等功能体验出色。相较之下,向日葵存在限时踢线、传输慢、广告多等痛点。选购建议:无论用何种手机,首选ToDesk,实现高效便捷的远程办公与协助。

lx08113的博客 267

go消息推送之极光推送 (JPush REST API + SDK,覆盖安卓与iOS)

使用 gorush有个绕不开的问题:国内安卓设备上 FCM 基本不可达,华为、小米、OPPO、vivo 各自为政——此时可用极光推送(JPush)作解决方案。它的思路和前面几家都不一样:App 集成极光 SDK 后拿到统一的 RegistrationID,服务端发一条 REST 请求,极光云端自动把消息路由到 APNs、各家厂商通道或极光自有长连接。这里给出了:一个用纯标准库直接调用极光的;另一个用社区维护的,类型化参数,接口注释与官方文档逐条对应。两个功能相同,可放在一起对比学习。

qq_40467670的博客 155
上一篇: 记录轨迹这个需求,我用 ArkTS 的思路在 iOS 上先验证了一版
下一篇: 我做了一款鸿蒙App:把每天通勤步数走成一条环球公路旅行
SameX-4869
博客等级 码龄17年 3354粉丝 657原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值