基于鸿蒙os开发跑步管理系统(一)-项目简介

项目简介

RunAdvisor 是一款基于 HarmonyOS 6.1.1 (API 24) 开发的智能跑步健康管理应用,旨在为跑步爱好者提供个性化的跑步建议、饮食记录、路线推荐和天气指导。

核心功能

功能模块 描述
首页仪表盘 天气信息、今日步数、热量摄入、快速跑步建议
饮食管理 100+ 食物数据库,5大分类,搜索和添加饮食记录
跑步建议 基于 BMI/年龄/天气的 9 步个性化建议算法
路线推荐 3 条北京城区真实路线,Canvas 动态地图渲染
个人中心 BMI 计算、最大心率、资料编辑
首次启动引导 自动检测并引导新用户完成资料设置
位置增强 卡尔曼滤波 + 陀螺仪融合提升定位精度

技术栈

  • 平台: HarmonyOS 6.1.1 (API 24)
  • 语言: ArkTS (严格模式)
  • UI 框架: ArkUI 声明式开发
  • 导航: NavPathStack + NavDestination
  • 地图渲染: Canvas 动态绘制 (非 MapComponent)
  • 数据存储: Preferences 轻量 KV 存储
  • 传感器: 计步器 (PEDOMETER)、陀螺仪 (GYROSCOPE)
  • 网络: @kit.NetworkKit HTTP 请求
  • 定位: @kit.LocationKit geoLocationManager

应用截图

首次启动引导

首次启动引导

首页仪表盘

首页仪表盘

个人中心

个人中心

项目结构

RunAdvisor/
├── entry/
│   └── src/main/
│       ├── ets/
│       │   ├── constant/Constants.ets       # 45+ 常量定义
│       │   ├── model/                       # 数据模型
│       │   │   ├── UserProfile.ets
│       │   │   ├── WeatherInfo.ets
│       │   │   ├── FoodItem.ets
│       │   │   ├── RunAdvice.ets
│       │   │   └── RouteInfo.ets
│       │   ├── service/                     # 服务层
│       │   │   ├── PreferencesService.ets
│       │   │   ├── CalorieService.ets
│       │   │   ├── WeatherService.ets
│       │   │   ├── StepService.ets
│       │   │   ├── LocationService.ets
│       │   │   ├── RunAdvisorService.ets
│       │   │   ├── RouteService.ets
│       │   │   └── LocationEnhanceService.ets
│       │   ├── pages/Index.ets              # 主页面 (5 Tab + 2 NavDest)
│       │   └── entryability/EntryAbility.ets
│       ├── resources/
│       │   ├── base/element/string.json
│       │   ├── base/profile/main_pages.json
│       │   └── rawfile/screenshots/
│       └── module.json5
├── docs/                                    # 文档目录
└── build-profile.json5

文档索引

编号 文档 说明
00 项目概述 功能介绍、技术栈、项目结构
01 架构与技术栈 分层架构、模块划分、权限配置
02 数据模型设计 5+ 数据模型定义与关系
03 服务层设计 8 个服务单例、职责与接口
04 首页与天气 首页布局、天气服务、步数与热量
05 饮食管理 食物数据库、饮食记录、搜索
06 跑步建议算法 9 步个性化建议算法
07 路线服务与地图渲染 3 条路线、Canvas 地图、时序修复
08 个人中心与首次启动 资料管理、BMI、首次引导
09 位置增强服务 卡尔曼滤波、陀螺仪融合
10 权限与安全 5 项权限声明与运行时处理
11 首次启动引导功能 新功能:自动引导流程
12 卡尔曼滤波位置增强 新功能:数学模型与实现
13 问题清单与已知限制 已知问题与绕过方案

项目开发动机

随着全民健康意识提升,跑步已成为最受欢迎的有氧运动之一。然而,许多跑步爱好者尤其是初学者面临以下问题:不知道应该跑多快、跑多远;不了解天气对跑步的影响;难以追踪每日饮食热量与运动消耗的平衡;缺乏基于个人体质的个性化建议。RunAdvisor 正是为解决这些痛点而设计的。

市面上的跑步应用大多侧重于运动记录,缺少将天气、饮食、体质综合分析的闭环方案。RunAdvisor 的核心设计理念是将"运动建议"与"环境感知"和"营养管理"三者关联,形成完整的健康管理闭环:用户记录饮食摄入,系统根据体质和天气给出跑步建议,运动消耗又反馈到热量平衡,从而指导下一步饮食决策。

目标用户画像

用户类型 特征 核心需求
跑步初学者 缺乏经验,容易过度训练 合理的运动强度建议,避免受伤
健身爱好者 有一定基础,追求效率 精确的心率区间和配速指导
减脂人群 关注热量摄入与消耗 饮食记录+运动消耗的综合追踪
通勤跑者 时间有限,需高效训练 快速获取当日建议,合理分配时间

功能模块详解

首页仪表盘

首页作为信息中枢,将用户最关心的四类数据聚合展示:天气状况影响运动决策,步数和热量追踪日常活动量,跑步建议提供当日行动方案。所有卡片数据在页面加载时异步获取,通过 @State 响应式机制自动更新 UI,用户无需手动刷新。

饮食管理

饮食管理模块内置覆盖中国日常饮食的 100+ 食物数据库,按谷物、肉类、蔬菜、水果、乳制品五大类别组织。用户可通过分类标签快速定位,也可通过搜索栏模糊匹配食物名称。添加记录时,系统根据食物单位热量和用户输入的重量自动计算摄入热量,并实时更新今日总热量统计。所有记录通过 Preferences 持久化存储,支持跨会话数据保留。

跑步建议

跑步建议是应用的核心差异化功能。算法基于用户 BMI、年龄和实时天气三个维度,经过九步计算生成轻松跑、标准跑、耐力跑三种方案。每种方案包含目标距离、配速、心率区间、预计时长、热身和放松时间以及个性化建议文本。算法确保所有数值在合理范围内,使用 Math.max() 设置下限保护。

路线推荐

路线模块预置三条北京城区真实跑步路线,覆盖入门到挑战三个难度等级。每条路线包含多个命名的途经点(如天安门、故宫、景山等),地图采用 Canvas 动态绘制而非 MapComponent,避免第三方地图依赖。地图支持路线轨迹、途经点标注、地标渲染和边界自适应。

个人中心

个人中心展示用户 BMI 指数、BMI 分类、最大心率和基础信息,支持资料编辑。首次启动时自动检测并引导用户完成资料设置,设置完成后 800 毫秒自动跳转至设置页面,完成设置后清空导航栈防止返回。

位置增强

位置增强服务通过卡尔曼滤波和陀螺仪传感器融合提升 GPS 定位精度。4x4 状态向量追踪位置和速度,4x4 协方差矩阵手动展开避免矩阵库依赖,陀螺仪角速度作为控制输入辅助预测。该服务在 EntryAbility.onCreate() 中启动,确保传感器数据在应用全生命周期可用。

技术亮点

单文件架构

所有 UI 逻辑集中在 Index.ets(约 1300 行)中,通过 @Builder 方法按功能模块划分 HomePage、DietPage、AdvicePage、RoutePage、ProfilePage 五个页面构建器,以及 WeatherCard、StepCard、CalorieSummaryCard、QuickAdviceCard 等卡片构建器。这种架构虽然看似集中,但在 ArkTS 严格模式下单文件结构避免了跨文件 @Builder 绑定的复杂性,降低了维护成本。

Canvas 地图渲染

路线地图完全基于 Canvas API 绘制,不依赖 MapComponent 或第三方地图 SDK。渲染管线包括:坐标归一化(GPS 经纬度转换为屏幕坐标)、边界自适应(自动计算缩放和偏移)、路线轨迹绘制(带阴影的彩色折线)、途经点标注(圆形标记 + 文字标签)和地标渲染。这种方案完全可控,且无需申请地图服务密钥。

卡尔曼滤波实现

LocationEnhanceService 实现了完整的离散线性卡尔曼滤波器,状态向量为 [x, y, vx, vy](纬度、经度、纬度方向速度、经度方向速度)。4x4 协方差矩阵的 16 个元素全部手动展开为独立字段(p00 到 p33),避免使用二维数组,符合 ArkTS 严格模式对类型安全的要求。过程噪声 q=0.001 和观测噪声 r=0.01 经过调优,在 GPS 信号波动时提供平滑的位置估计。

天气缓存机制

WeatherService 实现了基于时间戳的本地缓存策略。成功获取天气数据后,将 WeatherInfo 对象序列化为 JSON 存入 Preferences,并记录缓存时间。下次请求时先检查缓存是否在有效期内(30 分钟),若有效则直接返回缓存数据,避免频繁网络请求。缓存失效或首次加载时才发起 HTTP 请求。网络请求失败时降级返回北京默认天气数据,确保 UI 始终有内容展示。

首次启动引导

应用通过 Preferences 中的 PROFILE_SET_KEY 标记判断用户是否完成首次设置。检测到未设置时,在 aboutToAppear() 中设置 800 毫秒延迟后自动跳转至 ProfileSetupPage。延迟设计让用户先看到首页布局再进入设置,形成心理预期。设置完成后清空导航栈,用户无法返回设置页面,流程不可逆,确保数据完整性。

开发环境与构建

项目 版本/配置
DevEco Studio 5.0+
HarmonyOS SDK API 24 (6.1.1)
ArkTS 严格模式
构建系统 Hvigor
最低兼容版本 API 24
目标设备 手机/平板

与同类应用对比

特性 RunAdvisor 普通跑步App 专业训练App
个性化建议 BMI+年龄+天气三维 仅基于距离 需手动配置
天气集成 实时天气影响建议 仅展示天气 通常无
饮食追踪 100+中国食物数据库 通常无 需订阅
路线推荐 预置真实路线+Canvas地图 地图SDK依赖 通常无
定位增强 卡尔曼滤波+陀螺仪 原始GPS 高精度硬件
离线可用 天气缓存+本地数据 需联网 需联网
平台 HarmonyOS原生 Android/iOS 多平台

应用权限一览

应用声明了 5 项运行时权限,全部为 inuse 模式(仅在使用时申请):

权限 用途 对应功能
INTERNET 网络访问 天气API请求
APPROXIMATELY_LOCATION 粗略定位 城市级天气查询
LOCATION 精确定位 GPS坐标获取
ACTIVITY_MOTION 计步器 步数读取
GYROSCOPE 陀螺仪 位置增强融合
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐