这是一款基于 HarmonyOS 和 ArkTS 语言开发的现代化、功能完备的天气应用。本项目旨在完整地、端到端地展示一个ArkTS应用的开发全过程,从UI构建、网络请求到高级功能(如服务卡片、持久化存储)的实现。











- 实时天气查询: 显示当前城市的实时温度、天气状况、体感温度、湿度、风力风向等详细信息。
- 多日天气预报: 提供未来3天的天气预报,包括最高/最低温度和天气状况。
- 逐小时天气预报: 以横向滚动列表的形式,展示未来24小时内的天气和温度变化。
- 空气质量与生活指数: 展示AQI、PM2.5等空气质量数据,以及穿衣、洗车、运动等生活建议。
- 动态天气背景: 应用背景色可根据实时天气状况(晴、阴、雨、夜)平滑地进行渐变色切换。
- 城市搜索与切换: 支持中英文模糊搜索城市,并切换查看目标城市的天气。
- GPS自动定位: 可通过用户授权,自动获取当前位置并显示当地天气。
- 下拉刷新: 支持标准的手动下拉刷新交互。
- 数据持久化: 应用能“记住”用户上次选择的城市,下次启动时自动加载。
- 离线缓存: 在无网络连接时,能够展示上一次成功获取的天气数据,并提供离线提示。
- 桌面服务卡片 (Widget): 提供2x2尺寸的桌面小组件,无需打开App即可快速浏览天气概览,并支持定时刷新。
- 完善的权限处理: 包含对定位权限的申请、用户拒绝后的友好引导(跳转至系统设置)。
- 天气预警与后台通知:
- 实时预警: 在首页突出展示由官方发布的高温、暴雨、台风等天气预警信息。
- 后台推送: 应用退至后台后,会自动创建后台任务,每隔2小时静默检查一次天气预警。当检测到新的预警时,会立即通过系统发送通知,确保用户第一时间收到重要天气信息。
- 开发语言: ArkTS
- UI框架: ArkUI (声明式UI)
- 核心架构:
- 组件化: 将UI拆分为多个独立的、可复用的自定义组件。
- MVVM (思想): 通过
ViewModel
(或Controller
) 将业务逻辑与UI视图分离。 - 状态管理:
@State
,@Link
,@Prop
,@Watch
,@Provide
/@Consume
,@Observed
, 全局AppStorage
。
- 核心能力:
- 网络请求:
@kit.NetworkKit
- 数据持久化:
@ohos.data.preferences
- 定位服务:
@kit.LocationKit
- 权限管理:
@kit.AbilityKit
(abilityAccessCtrl) - 页面导航:
Navigation
(声明式导航) - 服务卡片:
FormExtensionAbility
- 动画与交互:
animateTo
,transition
,@ohos.vibrator
- 网络请求:
- 数据源: 和风天气 (QWeather)
- 克隆项目:
git clone https://github.com/liu-xin-a/weather-app.git
- 打开项目: 使用最新版本的 DevEco Studio 打开项目。
- 配置API Key:
打开
entry/src/main/ets/common/Constants.ets
文件,将QWEATHER_API_KEY
的值替换为您自己从和风天气开发者平台申请的 Key,以及替换成自己的API host。 - 运行: 连接真机或模拟器,点击运行按钮。
/entry/src/main/ets
├── common # 存放常量 (Constants.ets)
├── entryability # 应用主入口 (EntryAbility.ets)
├── model # 数据模型 (WeatherModels.ets)
├── pages # 页面UI (Index.ets, CitySearchPage.ets)
├── utils # 工具类 (PreferencesUtil, CacheUtil, etc.)
├── view # 可复用的自定义UI组件
└── weatherwidgetability # 服务卡片逻辑与UI
- 感谢 和风天气 (QWeather) 提供的免费、稳定、强大的天气数据API。
- 感谢所有为鸿蒙生态做出贡献的开发者和布道者。