# Metro Timer **Repository Path**: johnzchgrd/metro-timer ## Basic Information - **Project Name**: Metro Timer - **Description**: 地铁计时器 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-15 - **Last Updated**: 2026-10-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 地铁计时 · 站间间隔计时与统计 面向**地铁爱好者**的鸿蒙应用:在乘车时对任意两个站点之间的运行间隔计时,一键保存记录,按城市/线路筛选管理,并自动统计平均、最短、最长、区间排行、停站时长与趋势图。 - 目标系统:**HarmonyOS 6.0.0(API 20)及以上**(`compatibleSdkVersion`/`targetSdkVersion` 均为 `6.0.0(20)`,可运行于 6.0/6.1 系列设备) - 开发语言:ArkTS(ArkUI 声明式,Stage 模型) - 数据存储:`preferences` 本地持久化,**完全离线**;默认不申请权限(通知快捷入口仅在用户主动开启时请求通知权限;「从剪贴板导入」使用系统 `PasteButton` 安全组件一键授权读取) - 设计风格:简约卡片 + 蓝色主色,随系统切换浅色/深色;手机 / 平板 / 2in1 内容限宽 640vp 居中,手表使用独立精简 HAP ## 功能一览 ### ⏱ 计时页 - 选择**城市 → 线路 → 交路**(分叉/短交路时可选;内置 20 城,沪 10 含主线/支线/短交路样板) - 起始站通过**点选选择器**选取(**点选项即确认**,无需再点确定),方向**正向 / 反向**切换,站点预览沿当前方向逐站高亮 - **首屏计时操作**:路线以紧凑摘要显示,城市/线路/交路设置按需展开;开始、到达、发车和结束操作在计时卡片前部,快捷回填与站点预览排在后面 - **上次到站推荐**:30 分钟内可一键回填上次到站的同城线路、交路、站点和方向;起始站选择器优先列出该站;不会替用户切换城市,撤销/删除对应记录后推荐失效 - 大字号走表计时(分:秒.毫秒),支持**发车 / 到达 / 结束**逐站连测 - **快捷回填(无 GPS 的「定位」替代)**:自动记住每次开始计时用的起始站,按「城市+线路」累计;计时页「快捷」卡片提供**常用 / 上次起始站**一键回填与**最近使用线路**一键切换(零权限、零坐标数据) - **可选从停靠开始计时**:默认从「发车(行驶)」开始,也可先计起始站停靠时长 - **本次总时长**:显示「本次已记录 N 段 · 总时长」(会话内新增记录,撤销后不计) - **一键换乘 + 换乘计时**:同城市中**同名站点**即可换乘(默认仅同城不同线路)。停靠中先保存旧线路的停靠;待开始时也可从选定起始站直接点「开始换乘」,不生成未测量的停靠记录。选择目标线路后计步行换乘,点「到达站台 · 开始停靠」保存步行用时并开始目标线路停靠/候车,发车时再保存停靠并计下一段行驶。通知操作遵循相同顺序;重启可恢复换乘或目标站台停靠,撤销换乘时保留被放弃的停靠片段 - **当前区间历史统计**:计时中显示当前区间/停靠/换乘历史样本数、平均值、方差和最近一次用时 - **临时测量**:无需设置线路即可开始,按区间/停靠交替保存;「保存并结束」保留当前片段,支持重启续计和撤销。记录页「待补充」入口选择线路、交路和站点,补充后才计入线路统计,保留实测毫秒和记录时间 - **上次计时记录与撤销**:计时页显示上次记录,可右滑「撤销并继续」;当前会话恢复该相位的原走表起点,原记录、之后的会话记录和被放弃的未完成片段存入垃圾箱,避免重叠统计;历史记录显示「撤销记录」,只标记为不参与统计,可恢复 - **通知快捷入口**:在设置页开启后,每次开始计时自动显示通知,提供「下一相位」和「结束计时」操作;结束计时或关闭设置时移除通知 - **系统入口直达计时**:点击桌面卡片、通知正文或实时窗查看当前计时;原记录/统计页面和编辑子页面保留在返回栈中,点「返回上个页面」继续之前的操作。通知按钮绑定发布时的会话;旧会话操作不影响新的计时 - **桌面卡片**:可添加 2×2 计时卡片,显示相位、线路/区间和用时;系统计时组件根据保存的走表起点逐秒计算用时,应用退出后仍继续;相位变化时推送更新,点击打开计时页;卡片内容按小尺寸压缩排版 - **实时窗**:在设置页开启后,每次计时自动创建系统实时窗;状态栏胶囊和通知中心显示计时,随相位更新,结束计时后移除;更新由应用服务管理,不依赖计时页面是否显示 - **后台恢复**:计时会话定期保存到本机;应用进程被系统回收后重新打开,可按时间戳恢复计时状态 - 开始相位与主要计时按钮相邻;计时期间锁定会中断会话的线路/站点选择,避免误触破坏换乘 - 「到达 · 保存记录」一键入库;**行驶 / 停靠 / 换乘**分相位记录 ### ⌚ 手表端 - 独立 wearable HAP,适配手表小屏;可填写起点/下一站,点「发车」开始区间计时,点「到站」保存,并显示最近记录 - 计时状态与最近 20 段记录在手表本地保存,应用重启后可恢复正在计时的区间 - 手表数据目前独立保存在手表端,不与手机记录自动同步;需要手表设备完成界面与交互验证 ### ⚙ 设置 - 计时页和统计页右上角进入独立设置页面;集中管理通知快捷入口、实时窗、排行排序、排行条数和停靠分方向统计 - 系统入口开关保存到本机,下次计时自动沿用;显示当前系统入口状态与创建失败原因 - 线路管理与意见反馈入口集中在设置页;起始相位、路线选择和统计方向筛选仍可在对应页面快速操作 - 界面颜色与字号随系统设置变化;设置开关提供名称和说明,城市/线路选择器使用原生按钮,筛选条和顶部操作可换行 - 特殊大字号下,子页面标题与操作分行,表单输入框随字号增加高度;记录编辑的起终点上下排列。计时主要操作固定在滚动区外,记录工具按需展开,记录内容纵向显示,滑动按钮随字号增加宽度 ### 💾 数据备份 - 设置中的「数据备份」提供自动备份开关、立即备份、本机备份列表、导出文件与从文件恢复 - 数据变更后合并短时间内的修改并自动保存,退到后台时提交待保存备份;数据未变更时每天启动补充一次快照 - 完整备份包含全部记录(含撤销和垃圾箱)、自定义城市/线路、反馈与草稿、常用站点、最近线路及统计偏好;设备通知权限、实时窗 id 与旧计时会话不随备份恢复 - 文件包含版本和 SHA-256 完整性校验;恢复前逐项验证并保留当前数据的快照,校验失败或仍在计时时拒绝替换数据 - 自动备份保留最近 8 份,手动备份和恢复前备份各保留最近 4 份;本机备份随卸载清除,需要通过系统文件选择器导出到应用外保留 - 数据以单一快照串行写入本地 preferences,旧的分项数据自动迁移;保存/读取失败在首页显示入口,损坏数据恢复前保留原始文本 ### ≡ 记录页 - 按城市 / 线路**筛选**(两页共用筛选条件);支持**搜索**(按站点 / 备注 / 线路 / 城市模糊匹配) - 每条记录显示:起点 → 终点、城市·线路、耗时、时间、备注;时间和备注独立分行,避免状态标签挤出内容,长站名按可用宽度显示 - 点击**编辑**(改站点 / 时长 / 备注)、**左滑移入垃圾箱**(带确认)、**手动添加**记录 - 编辑和手动添加使用可滚动的独立子页面;线路、名称输入、新增城市/线路、记录及临时记录补充自动保存本机草稿,返回保留修改,重启后可继续,点击「舍弃」才移除草稿;保存前检查记录及显示的线路/站点是否已变化,避免覆盖新的修改 - 长按记录直接进入多选并选中该条;多选时点击勾选/取消,点「完成」退出;保留「批量」按钮作为另一种入口 - **撤销 / 恢复**:记录支持滑动撤销或恢复;撤销标签保留数据但不参与统计 - **垃圾箱**:删除先移入垃圾箱;可以恢复,或在垃圾箱内永久删除;当前计时记录移入垃圾箱后不再参与统计 - **批量管理**:勾选后可批量**撤销 / 恢复 / 移入垃圾箱 / 永久删除**选中记录 - **导出 / 分享 / 导入(文件,不受剪贴板字数限制)**: - 「导出文件」可选 **JSON(数据包,可再导入)** / **JSONL(每行一条记录,最底层格式)** / **纯文本(便于手机上阅读)**,经系统「另存为」保存为 `.json` / `.jsonl` / `.txt` - 「分享」可选 **JSON / JSONL / 纯文本**,经系统分享面板发送 - 「导入文件」从系统文件选择器选 `.json` / `.jsonl` / `.txt` 导入(**自动识别 JSON 包或 JSONL**,按 id 去重);也可用系统 `PasteButton` 从剪贴板快速导入 - 操作后记录页**即时刷新**(列表项随数据变化自动更新) ### ◫ 统计页 - 指标:**行驶 / 停靠 / 换乘**记录数、平均、最短、最长耗时(分相位统计) - **排行**:在设置页选择「显示全部 / 仅看 TOP10」和**排序**(次数 / 平均耗时 / 名称);统计页保留**方向筛选**(全部 / 上行 / 下行),偏好自动记录 - **停站时长**:各站平均停靠时长排行;可开启「**停靠分方向**」,同站不同方向的停靠分开统计 - **换乘耗时**:各换乘点(含「A线 → B线」)平均换乘用时排行 - **行驶时长分布直方图** 与 **最近 20 次趋势图**(Canvas 折线,含最小 / 平均 / 最大参考线) - 直方图与详情页共用绘图组件:柱子共用基线,空区间不画柱,标签按实际字宽和可用空间排列;大字号或较长标签空间不足时可横向滑动查看,避免换行把柱子顶起 - **分享**:一键把统计指标与区间排行摘要经系统分享面板发送(纯文本) - **指定区间**:独立选择城市、线路和起终点,支持名称搜索、交换起终点、历史线路/站点和记住查询。查看完整测量的数量、均值、最值、方差、分布及明细;跨多站可切换仅行驶或包含中间停靠,查询不改变计时路线和记录页筛选 ### 🗺 线路管理 - 查看内置城市与线路(内置数据不可删);多交路线路显示交路摘要 - **添加自定义城市**、**给任意城市补充自定义线路**(站点用空格/逗号分隔;站名前加 `*` 表示未开通) - 自定义线路可点击站状态在「运营 / 未开通」间切换 - 点击线路展开完整站序、交路和站点运营状态;导入线路默认收起站序,避免长列表挤占页面 - 支持环线标记;分叉/早停以多交路表达(见沪 10 号线样板) - **复制 AI 提示词 / 从剪贴板导入**:一键复制描述本应用所需字段格式的提示词;把 AI 返回的线路数据复制到剪贴板后,点系统 `PasteButton` 即可一键授权并自动回填(无需申请权限) - **导出 / 分享 / 导入(文件)**:自定义线路可导出为 `.json` / `.jsonl`(均可再导入)或 `.txt`(便于阅读)、从文件导入(自动识别 JSON 包或 JSONL,跳过已存在同名线路),或经系统分享面板按 **JSON / JSONL / 纯文本** 分享 ### 💬 反馈 - 在「计时」页顶部进入反馈页,选择类型(建议/问题/表扬/其他)并填写内容,**保存在本机** - 支持**复制**单条或全部反馈为文本,自行发送给开发者(应用默认不申请网络权限) ### 数据包 - 离线数据包:`entry/src/main/resources/rawfile/metro_pack.json`(启动时校验并覆盖同名线路) - 校验:`node tools/validate_metro_pack.mjs` - **不**在客户端抓取各地铁官网;可选远程更新地址留空则永不联网 ## 内置数据 内置 20 个城市的多条主要线路(含杭州 12 条现行线路)、约 1900 个站点(截至 2026 年初): | 城市 | 内置线路 | | --- | --- | | 北京 | 1、2、4、5、6、8、9、10 号线 | | 上海 | 1、2、3、4、10 号线 | | 广州 | 1、2、3、3(北延段)、5、7、8 号线 | | 深圳 | 1、2/8、4、5、11 号线 | | 成都 | 1、2、3、4 号线 | | 武汉 | 1、2、3、4 号线 | | 南京 | 1、2、3 号线 | | 杭州 | 1、2、3、4、5、6、7、8、9、10、16、19 号线 | | 重庆 | 1、2、3 号线 | | 西安 | 1、2、3 号线 | | 天津 | 1、2、3 号线 | | 苏州 | 1、2 号线 | | 长沙 | 1、2 号线 | | 郑州 | 1、2 号线 | | 青岛 | 2、3 号线 | | 合肥 | 1、2 号线 | | 福州 | 1、2 号线 | | 厦门 | 1、2 号线 | | 无锡 | 1、2 号线 | | 南昌 | 1 号线 | > 线路开通/调整可能滞后,请以实际为准。可在 App 内「线路管理」补充自定义线路,或直接编辑 `entry/src/main/ets/data/CityData.ets`。 > 杭州已收录 12 条现行地铁线路(1-10、16、19 号线,含 3/6 号线分叉交路);市域接轨线(绍兴地铁 1 号线、杭海城际铁路)未纳入,可按需自行添加。 ## 工程配置 已用本机 **DevEco Studio 6.1(内含 HarmonyOS 6.0/API 20 SDK、hvigor)** 通过 hvigor 命令行**编译验证通过** hAP 打包,产物:`entry/build/default/outputs/default/entry-default-unsigned.hap`(约 938 KB,未签名;在 IDE 里运行会自动签名)。因为仓库不含签名材料,命令行构建默认产出**未签名** hAP,签名由各开发者本地自动签名完成。 | 项 | 值 | | --- | --- | | compileSdkVersion | 不显式配置(使用当前 DevEco 内置 SDK 版本) | | targetSdkVersion | `6.0.0(20)` | | compatibleSdkVersion | `6.0.0(20)`(HarmonyOS NEXT 6.0 及以上设备可安装) | | runtimeOS | `HarmonyOS` | | modelVersion | `6.0.0` | > 工程不锁定 compileSdk(交给当前 DevEco 的内置 SDK),但显式声明 `compatibleSdkVersion` 与 `targetSdkVersion` 为 `6.0.0(20)`。 > 已在 DevEco Studio 6.1(API 24 SDK)上通过 hvigor 命令行**编译验证通过**;`compatibleSdkVersion 6.0.0(20)` 表示可安装到 HarmonyOS 6.0 及以上设备。 ### 签名与安装到手机 - 在 DevEco Studio 中开启**自动签名**(File → Project Structure → Signing Configs, 勾选 Automatically generate signature),登录华为账号即可生成调试证书与描述文件, 证书绑定到当前工程的 bundleName,并把已连接过的手机 UDID 写入描述文件。 - 调试签名仅能安装到描述文件中注册的设备;HarmonyOS NEXT 不支持点击文件直装, 安装通过 DevEco 的 Run、或 hdc(USB / 同网段无线调试 `hdc tconn IP:端口` + `hdc install`)。 - 如需把包发给别人安装,走 AppGallery Connect 内测分发(发布证书签名 + 测试用户)。 > 开源仓库不含任何签名材料。bundleName 默认为 `com.metrofan.subwaytimer`, > 自用时请改成你自己的(AppScope/app.json5),再开启自动签名。 **签名与 Git 的工作方式(推荐)**:`build-profile.json5` 在仓库中只有 `"signingConfigs": []`, 签名信息**永不提交**。本地开启自动签名后 DevEco 会把它写入本地的 `build-profile.json5`; 为避免自动签名反复改动这个被跟踪文件造成 Git 噪音,请在**每台电脑**上执行一次: ```bash git update-index --skip-worktree build-profile.json5 # 该文件本地改动不再进入 git ``` (要正式修改该文件时:先 `git update-index --no-skip-worktree build-profile.json5`,改完再 `--skip-worktree`。) 本地签名配置可参考随仓库的 `signing.local.json5`(已加入 `.gitignore`,仅作本机备份/模板)。 ## ⚠ 重要:工程路径不能包含中文 DevEco/hvigor 对工程路径有校验(报错 `Invalid project path`),**不能把工程放在含中文的目录**(例如本工作区路径)。 请先把整个文件夹复制到纯英文路径再打开,例如: ```bat robocopy "你的工程目录" "D:\DevProjects\MetroTimer" /E /XD .hvigor .hvigor-home build oh_modules node_modules ``` ## 运行步骤 1. 安装 **DevEco Studio 6.0.0 及以上**(需包含 HarmonyOS 6.0.0 / API 20 SDK),登录华为账号并完成自动签名配置。 2. 把本工程复制到**纯英文路径**(见上),`File → Open` 打开,等待 hvigor 与 ohpm 依赖同步完成。 3. 连接真机(HarmonyOS 6.0+ 设备,兼容 6.0/6.1 系列)或启动模拟器,点击 Run ▶ 即可。 4. 签名提示:选择 DevEco 的自动签名(默认即可),无需申请特殊权限。 > 若同步时提示 `modelVersion` 不匹配(例如您的 DevEco 为 6.1.x 且要求 `6.1.0`),把根目录 `oh-package.json5` 与 `hvigor/hvigor-config.json5` 中的 `modelVersion` 改为 `"6.1.0"` 即可,其余无需改动。 ## 目录结构 ``` ├── AppScope/ # 应用级配置与图标 ├── entry/src/main/ │ ├── module.json5 # 模块配置(不申请任何权限;剪贴板读取用系统 PasteButton 授权) │ ├── ets/ │ │ ├── entryability/EntryAbility.ets │ │ ├── formability/MetroTimerFormAbility.ets # 桌面卡片数据提供者 │ │ ├── model/Models.ets # 数据模型 │ │ ├── data/CityData.ets # 内置城市线路数据 │ │ ├── service/AppService.ets # 全局状态 + preferences 持久化 │ │ ├── service/AppNavigation.ets # 原生 NavPathStack、页面参数与计时页可见性 │ │ ├── service/TransientDialogs.ets # 系统入口关闭临时选择窗,保留编辑页面 │ │ ├── service/TimerSystemService.ets # 通知/实时窗设置与会话同步 │ │ ├── service/BackupService.ets # 私有快照、轮换与恢复 │ │ ├── model/BackupData.ets # 完整备份数据与结构校验 │ │ ├── model/EditDraft.ets # 五类编辑草稿、名称输入与版本/字段校验 │ │ ├── model/RouteCreation.ets # 新增表单、站序预览与格式化粘贴 │ │ ├── model/LineNameInput.ets # 名称确认与稳定标识保留 │ │ ├── model/TimerCardData.ets # 卡片走表起点与时间单位兼容 │ │ ├── model/TimerShortcutAction.ets # 通知动作参数、会话与相位校验 │ │ ├── model/IntervalStats.ets # 稳定标识选项、完整区间测量与只读汇总 │ │ ├── model/StatsMath.ets # 插值分位数 │ │ ├── model/PickerOptions.ets # 搜索保留原始选项索引 │ │ ├── model/UiSizing.ets # 字号分级、输入框及滑动操作尺寸 │ │ ├── model/HistogramLayout.ets # 直方图列宽、空桶和柱高边界 │ │ ├── utils/BackupCodec.ets # 版本化备份与 SHA-256 校验 │ │ ├── utils/CoreDataStore.ets # 大快照私有文件、校验与 preferences 引用 │ │ ├── utils/Format.ets # 时间格式化 │ │ ├── utils/Clipboard.ets # 剪贴板读写工具 │ │ ├── utils/Share.ets # 系统分享(ShareKit,失败回退剪贴板) │ │ ├── utils/LiveViewShortcut.ets # 系统实时窗生命周期 │ │ ├── widget/MetroTimerCard.ets # 桌面计时卡片 │ │ ├── utils/FileTransfer.ets # 文件导出/导入(系统「另存为」/选择,无需权限) │ │ ├── view/ │ │ │ ├── Style.ets # 深浅色语义资源与稳定线路配色 │ │ │ ├── ActionButton.ets # 可换行、随内容增加高度的原生按钮 │ │ │ ├── PageHeader.ets # 子页面标题、返回、舍弃和保存操作 │ │ │ ├── TimerView.ets # 计时页 │ │ │ ├── RecordsView.ets # 记录页 │ │ │ ├── StatsView.ets # 统计页 │ │ │ ├── MetricCard.ets # 响应数值变化的指标卡片 │ │ │ ├── HistogramPlot.ets # 共用基线与原生文本测量的直方图 │ │ │ ├── StatDetailView.ets # 分布、分位数和测量明细 │ │ │ ├── FilterBar.ets # 筛选条 │ │ │ ├── PickerDialog.ets # 通用选择对话框 │ │ │ ├── DraftNotice.ets # 首页未完成编辑入口 │ │ │ ├── DraftStatus.ets # 草稿实际落盘状态与失败重试 │ │ │ └── RecordEditor.ets # 保留输入与毫秒精度的记录表单 │ │ └── pages/ │ │ ├── Index.ets # Navigation 容器与三 Tab 首页,手机端唯一 Entry │ │ ├── TimerPanel.ets # 系统入口计时页面,返回原页面 │ │ ├── RecordEdit.ets # 独立记录编辑页面、持久草稿与修改冲突检查 │ │ ├── Drafts.ets # 未完成编辑列表、继续与明确舍弃 │ │ ├── LineManage.ets # 线路管理页(含 AI 提示词复制/剪贴板导入) │ │ ├── LineEdit.ets # 线路与交路编辑草稿 │ │ ├── LineNameEdit.ets # 名称输入子页面,随线路草稿保存 │ │ ├── CreateCity.ets # 新增城市表单、恢复与明确舍弃 │ │ ├── CreateLine.ets # 新增线路表单、站序预览与粘贴回填 │ │ ├── IntervalStats.ets # 指定起终点统计与测量组成 │ │ ├── AssignRecord.ets # 补充临时记录的线路和站点 │ │ ├── Feedback.ets # 反馈页 │ │ ├── Settings.ets # 统计偏好与管理入口 │ │ ├── TimerEntrances.ets # 通知和实时窗设置子页面 │ │ └── Backups.ets # 自动备份、导出与完整恢复 │ └── resources/ # 字符串/颜色/页面路由 ├── wearable/src/main/ # 独立手表 HAP;本地计时与最近区间记录 │ ├── module.json5 │ └── ets/pages/Index.ets └── tools/make_icon.ps1 # 图标生成脚本(纯 PowerShell,无第三方依赖) ``` ## 开源许可 本项目基于[木兰宽松许可证,第2版(Mulan PSL v2)](http://license.coscl.org.cn/MulanPSL2)开源, 任何人可自由使用、修改、分发(含商用),详见 [LICENSE](LICENSE)。 ## 说明与提示 - **计时精度**:走表基于系统时间戳计算,约 100ms 刷新显示(毫秒级展示),实际记录精度为毫秒级;App 退到后台计时仍会继续累计。 - **方向**:同一交路双向通用;环线支持首尾回绕;分叉/短交路请先选对交路再计时。 - **换乘判定**:默认按「**同城市 + 同名站点**」匹配可换乘线路(仅限不同线路,不含同名站的不同交路);换乘后的行进方向沿用当前正向/反向设置,可在计时页随时切换。 - **分享**:记录 / 统计 / 自定义线路的分享走**系统分享面板**(ShareKit),只发送纯文本、不申请任何额外权限;若设备不支持分享面板则自动回退为「复制到剪贴板」。 - **导出 / 导入文件**:经系统「另存为」/「文件选择」面板保存或读取 `.json` / `.txt`,**无需申请文件权限**(由系统面板授权所选文件)。数据量大时请优先用**文件**而不是剪贴板(剪贴板有字数上限,可能截断)。 - **隐私**:所有计时记录仅保存在本机 `preferences` 中,不上传;默认不申请网络权限,也**不申请剪贴板读取权限**。从剪贴板导入线路数据时,使用系统 `PasteButton` 安全组件,由用户点击后临时授权读取,隐私由系统保障。 - 手机页面、弹窗、启动窗口、系统栏和桌面卡片均使用随系统解析的深浅色资源;不额外保存主题偏好。应用通过 AppScope 的 configuration profile 声明字号跟随系统,配置允许最高 3.2 倍字体缩放;特殊大字号与跨设备布局仍须继续验收。 - 手机页面已使用 `Navigation` / `NavDestination` 与 `NavPathStack`;部分系统 API 仍有异常处理声明警告,系统错误处理属于后续验收工作。桌面卡片的 `router` 动作为 Form Kit 打开应用协议。 ## 待办 / 路线图 ### 用户反馈(2026-10-01 至 2026-10-08) - [x] **清除筛选后统计不刷新**:清除或切换筛选时同步重算汇总和图表;筛选结果为空时仍可操作筛选条。 - [x] **撤销改为计时页上次记录 + 右滑继续**:恢复原相位的走表起点;被替代的记录和当前未完成片段保留在垃圾箱;回退多段时移走后续会话记录以免重复统计,历史记录撤销不改变正在计时的会话。 - [x] **增加垃圾箱**:删除改为移入垃圾箱,支持恢复和永久删除;统计忽略垃圾箱记录。 - [x] **缩短开始相位与计时按钮的距离**:计时期间直接显示相位按钮。 - [x] **一键换乘状态正确**:换乘前先保存停靠记录;切换线路时同步切到目标线路同名站;计时中锁定会中断会话的路线和起始站操作。 - [x] **当前区间历史统计**:展示历史数量、均值、方差和上次用时。 - [x] **路线详情和导入展示**:点击路线展开具体站序、交路及站点状态;默认不展开导入线路的全部站名。 - [x] **通知快捷入口**:由用户在设置页开启并授权,开始计时自动显示,提供下一相位和结束计时操作。 - [x] **桌面卡片**:提供 2×2 ArkTS Form 卡片;根据保存的计时起点逐秒续算,兼容卡片回调返回秒或毫秒的差异;Pura 90 模拟器验证桌面走表、进程退出后继续和紧凑布局。 - [x] **实时窗**:通过 Live View Kit 本地 TIMER 场景创建、更新和结束计时窗,包含状态栏计时胶囊;已在 Pura 90 模拟器验证退回桌面的胶囊计时、通知中心展示、相位更新及结束操作;创建失败时显示失败原因。 - [x] **后台恢复**:本地保存计时会话快照,重启后按时间戳恢复;操作系统仍可能回收进程,应用无法保证永不被杀。 - [x] **手表端基础计时**:新增 wearable HAP,支持设置起点/下一站、开始和保存区间、结束未完成计时、本地保存最近 20 段及重启恢复;尚未与手机同步记录,需手表设备完成界面与交互验证。 后续使用反馈:记录行滑动操作标签已增加宽度,完整显示“撤销并继续”和“移入垃圾箱”;垃圾箱数量实时更新。通知/实时窗集中到「设置 → 通知与实时窗」子页面;统计偏好、备份、线路管理及反馈集中到设置页。两个系统入口按会话自动启动与结束;实时窗胶囊在返回桌面或切换应用后显示,通知中心可查看详情。返回应用会重新查询系统状态;创建失败保留启用偏好并显示原因,可主动重新检查。停止失败保留引用供重试,停止成功不保留结束卡片。 > 桌面卡片已接入 Form Kit 并在 Pura 90 模拟器验证添加和显示;手表端已编译为独立 wearable HAP,当前仅手表本地记录,仍需真机体验验证及后续手机/手表数据同步。实时窗已在 Pura 90 模拟器验证创建、显示和结束;Live View Kit 仍为 Beta,正式发布还需在 AppGallery Connect 开通,并满足设备系统开关及工具类 TIMER 场景准入。参考:[Form Kit](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/formkit-overview-V13)、[穿戴应用开发入门](https://developer.huawei.com/consumer/cn/multidevice/wearables/get-started/)、[实时窗场景及准入](https://developer.huawei.com/consumer/en/doc/harmonyos-guides-V14/liveview-introduction-V14)、[实时窗本地创建](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-v5/liveview-create-locally-V5)。 ### 第二批用户反馈(2026-09)待办 已完成(见提交 `7c893a0`):总时长按「当前时间−开始计时时间」、换乘流程改为不先停靠/结束直接发车、站点预览基点为当前站且显示到终点、换乘选择框不预选+提示、快捷回填计时中先确认、「常用起始站」改「上次起始站」、统计排序/筛选设置持久化+默认按平均、反馈草稿自动保存、上海 2 号线东昌路→浦东南路。 以上记录该批反馈的历史实现;换乘流程已按 2026-10-09 的新反馈调整为到达目标站台后先计停靠,发车再计行驶。 尚未实现: - [x] **自动备份**:数据变更后合并保存、后台提交、每天启动补充;支持手动备份、导出、恢复前快照、完整性和字段校验,以及损坏数据恢复。 - [x] ~~**导出记录支持最底层格式**(如 **jsonl**,包含全部字段)~~ —— **已实现**:导出 / 分享可选 **JSON / JSONL / 纯文本**;文件经系统「另存为」保存,避免剪贴板截断;导入**自动识别** JSON 包或 JSONL - [x] **选择起始站时优先推荐「上次下车点」**:记录上次确认到站,30 分钟内优先推荐并支持一键回填;不切换城市,过期或对应记录被撤销/删除后不再推荐 - [x] ~~**计时界面显示当前正在记录的停靠 / 区间的历史统计**(如该区间历史平均、上次用时)~~ —— **已实现**:当前计时页显示数量、均值、方差和最近一次用时 - [x] **统计支持「指定站点之间」**:自定义起终点查看直接记录或同轮完整多站测量,支持包含中间停靠、分布、组成明细、搜索及查询持久化 - [x] **记录改用站点唯一 id**:首次启动/导入时关联线路与站点标识,保留原始名称、耗时、时间及状态;更名后按标识显示当前名称,删除后的记录保留名称快照,同名新站不混合旧站统计 - [x] **批量管理改为长按激活**:长按选中并进入多选;点击可编辑或勾选,滑动操作保留,仍提供批量按钮入口 - [x] ~~**撤销 / 恢复改为左右滑**~~ —— **已实现**:记录行支持滑动撤销/恢复;当前计时的上次记录可右滑撤销并继续 - [x] **一键换乘在未计时时也可用**:待开始时选定可换乘站即可开始步行换乘计时,校验目标交路并同步起始站;不制造停靠记录,完成后继续行驶,重启可恢复 - [x] **地铁线路可编辑**:支持内置/导入/自定义线路的本机编辑、站点更名/增删/排序/状态、交路管理和环线设置;内置线路可恢复预置,放弃草稿不改变已保存数据,计时中禁止保存线路修改 - [x] **未添加线路的「临时模式」**:先测量并保存为待补充记录,支持区间/停靠交替、重启恢复、撤销与保存结束;结束后选择实际线路、交路和站点,原始耗时、时间、会话顺序及状态保留 ### 持续优化与验收 长期目标仍在推进;已完成一批功能不代表已达到完整的鸿蒙最佳实践标准。 - [x] 计时主操作首屏可见,路线设置按需展开;首屏路线操作使用至少 44vp 的按钮高度,走表字号可随宽度缩小 - [x] 上次到站的时效、跨城市保护、计时中保护与撤销/删除失效:12 项领域检查通过,并在 Pura 90 模拟器验证重启恢复和一键回填;到期定时移除推荐,不做持续轮询 - [x] 记录长按、多选、单击编辑与左右滑动的交互验证 - [x] 撤销时恢复原走表起点,保存被放弃的当前片段,并明确当前会话与历史记录的操作语义;23 项领域检查通过,Pura 90 模拟器验证计时页/记录页右滑继续、重启恢复和垃圾箱恢复;计时页滑动卡片独立于走表刷新,避免按钮点击失效 - [x] 自动备份、导出备份、恢复前快照及恢复验证:36 项备份/文件检查通过;Pura 90 模拟器验证从导出文件恢复、记录和统计偏好同步恢复、重启一致;原有 3 条记录完整保留,含测试记录的备份已清理 - [x] 稳定站点标识、一次性历史记录迁移与线路编辑:37 项领域检查、39 项备份/文件检查通过;Pura 90 模拟器验证站序保存、重启保留、恢复预置和放弃草稿,原有 3 条记录的名称、耗时、时间及状态保留 - [x] 独立「通知与实时窗」设置子页面与系统状态恢复:9 项系统入口检查通过;Pura 90 模拟器验证胶囊持续计时、通知中心显示、进程重启恢复及结束移除,记录页左右滑按钮文字完整显示 - [x] 指定区间、待开始换乘与统计显示更新:60 项领域检查、45 项备份/文件检查、9 项系统入口检查通过;Pura 90 模拟器验证两段行驶的完整测量、仅行驶/含中间停靠切换、交换起终点、组成明细、查询重启保留、待开始换乘恢复与继续行驶,以及清除筛选后 4 段 → 5 段;测试记录和含测试记录的备份已清理 - [x] 临时测量与补充、返回行为及毫秒精度:73 项领域检查、48 项备份/文件检查、10 项系统入口检查通过;Pura 90 模拟器验证临时停靠重启恢复、补充后待办 2 条 → 1 条并计入统计,34.477 秒和记录时间保持;系统返回可关闭统计详情、多选、垃圾箱和待补充筛选,补充草稿放弃前确认;编辑保存保留原有 3310ms。测试记录与相关备份已清理 - [x] 原生 Navigation 与返回栈迁移:8 个子页面统一使用 NavDestination,保留当前首页 Tab、线路详情展开状态与编辑草稿;隐藏页面取消监听,计时页隐藏时暂停界面走表刷新,实际计时继续。80 项领域检查、49 项备份/文件检查、10 项系统入口检查通过;Pura 90 模拟器验证设置嵌套返回、线路草稿继续/放弃、统计详情先关闭、记录多选退出、临时计时跨页面继续,以及补充记录跳转线路管理后保留草稿。原有 3 条记录逐字段保持,测试记录与相关备份已清理 - [x] 系统入口直达计时与编辑页返回:共 10 个原生子页面;修复动态卡片误用静态 FormLink 导致点击无响应,改用 postCardAction。通知正文与实时窗传递统一打开动作,下一相位按钮校验发布时的会话/相位/走表起点/记录顺序;冷启动等待会话恢复,旧操作显示提示。记录编辑移至独立子页面,保留表单并检查修改冲突;窗口加载完成后再设置背景,避免初次启动的窗口状态错误。98 项领域检查、53 项备份/文件检查、14 项系统入口检查及 16 项外观检查通过;Pura 90 模拟器验证卡片/通知正文/实时窗实际点击、通知保存与结束、旧会话拒绝、重复打开一次返回、计时子页面持续走表、卡片返回线路编辑仍保留未保存站序,以及记录表单返回/保存后保留 3310ms。测试记录与对应备份已清理,原有 3 条记录逐字段保持 - [x] 三类主编辑页的持久草稿与独立管理:共 11 个原生子页面;首页及设置提供「未完成编辑」,返回保留草稿,舍弃等待本机保存,恢复保留编辑开始时的版本。完整备份纳入草稿,大快照改为先写入并校验私有文件再切换 preferences 引用。102 项领域检查、81 项备份/文件检查、14 项编辑逻辑检查、14 项系统入口检查和 16 项外观检查通过;Pura 90 模拟器验证线路、临时记录补充、记录备注输入在强制结束进程后恢复,系统入口返回继续编辑,返回保留与明确舍弃。临时测量补充前后保持 12.230 秒和原时间戳,记录编辑保持 3310ms;测试记录与草稿备份已清理,原有 3 条记录逐字段保持 - [x] 新增城市/线路及名称输入迁移:共 14 个原生子页面;新增表单和名称输入支持返回保留与冷启动恢复。站序预览标记运营/未开通状态,识别重复站名;粘贴支持多行站点及环线说明,只回填草稿。名称输入随原线路草稿保存,未确认时主页面禁止保存;确认名称仍需保存整条线路,舍弃名称保留其他已确认修改,冲突时可明确舍弃本次输入而保留新草稿。备份摘要及恢复确认补充城市配置数量,避免空城市被隐藏。112 项领域检查、94 项备份/文件检查、32 项编辑逻辑检查、14 项系统入口检查和 16 项外观检查通过;Pura 90 模拟器验证三个新页面的输入恢复、系统计时入口返回、名称子页面的系统返回、确认新增站点后 31 站仅存在于草稿、新增 3 站含 1 未开通环线及空城市保存。测试城市、线路和相关草稿备份已清理,原有记录及查询/常用站点保持 - [ ] 系统返回手势、全部选择弹窗、焦点与无障碍;其他弹窗打开时的系统入口落点;真实输入法键盘显示与切换的完整验收 - [x] 桌面卡片持续计时显示及小尺寸布局:秒/毫秒回调兼容、系统计时组件、自行续算;模拟器验证从 0:00 增长到 0:23,强制结束应用进程后增长到 3:48 - [x] 系统外观与基础可访问性:深浅色资源覆盖手机页面/弹窗和桌面卡片,系统栏随配置更新,Canvas 重新解析色值;主要文字、按钮及线路标签对比度至少 4.5:1。启用系统字号跟随,修复特大字号下顶部操作溢出与底部标签裁切,站点名称允许两行、筛选按钮可换行,选择器和设置开关补充可读标签。16 项外观检查通过;Pura 90 模拟器验证深色计时/设置/统计图、运行中切回浅色,以及系统“特大”字号下计时、设置、记录、统计、指定区间和站点选择器 - [x] 特殊大字号主要流程:共用可换行按钮与子页面标题栏,输入框随字号增高;起终点输入上下排列,选择器列表可滚动且取消/确认保留在底部。特殊大字号下,计时主要操作固定在滚动区外,路线设置按需展开;记录纵向展示,工具区可收起,撤销/垃圾箱/恢复按钮随字号增宽。系统入口会关闭临时选择窗,保留原页面和草稿。117 项领域、94 项备份/文件、34 项编辑逻辑、14 项系统入口和 22 项外观检查通过(共 281 项)。Pura 90 模拟器以临时应用级 SDK 字号覆盖实测 1.75、2.5、3.2 倍,覆盖计时、设置/系统入口、记录、记录编辑、城市表单、线路管理与编辑;3.2 倍下钟面、主要操作与垃圾箱滑动标签完整显示。已移除临时覆盖并恢复系统标准字号,正式版本仍随系统;复测实时窗桌面胶囊、通知中心、点击返回计时与结束移除。测试后原有 3 条记录、草稿、配置、查询及常用站点逐字段保持,测试备份已通过应用页面清理 - [x] 2026-10-09 使用反馈修复:主统计和详情直方图共用固定绘图区,标签先测量再分配列宽,空桶不画短柱,空间不足可横向滑动;修正首尾标签以匹配原分桶边界,分桶逻辑保持。换乘完成改为到达目标站台开始停靠,发车再保存目标停靠并计行驶;通知按钮同步为「到达站台」。123 项领域、96 项备份/文件、34 项编辑逻辑、15 项系统入口和 24 项外观检查通过(共 292 项),覆盖原线路停靠/步行/目标停靠分段、终点站、重复通知、撤销和目标停靠重启恢复。Pura 90 模拟器验证标准字号主图与详情图的共用基线、系统特大字号横向滑动,以及停靠中换乘、到达目标站台、强制结束进程后恢复停靠、发车进入目标线路行驶。通过应用备份页面清理测试记录和测试备份;测试前已有 32 条记录与全部配置/查询/常用站点逐字段保持,原有 9 份备份逐文件保持,恢复标准字号和自动备份开关 - [ ] 未覆盖页面和弹窗的特殊大字号、屏幕阅读器实际朗读/焦点顺序、桌面卡片主题/字号、横屏/平板和手表布局的完整验证 - [ ] 手表完整线路体验、手机/手表数据同步与手表设备验证 - [ ] 存储失败、进程回收、启动性能、长时间计时、系统时钟调整与发布签名的验收 领域检查运行方式(使用 DevEco SDK 自带的 TypeScript 模块): ```powershell node tools/test-domain.cjs "C:/Program Files/Huawei/DevEco Studio/sdk/default/openharmony/ets/build-tools/ets-loader/node_modules/typescript" node tools/test-backup.cjs "C:/Program Files/Huawei/DevEco Studio/sdk/default/openharmony/ets/build-tools/ets-loader/node_modules/typescript" node tools/test-editors.cjs "C:/Program Files/Huawei/DevEco Studio/sdk/default/openharmony/ets/build-tools/ets-loader/node_modules/typescript" node tools/test-system-entrances.cjs "C:/Program Files/Huawei/DevEco Studio/sdk/default/openharmony/ets/build-tools/ets-loader/node_modules/typescript" node tools/test-appearance.cjs "C:/Program Files/Huawei/DevEco Studio/sdk/default/openharmony/ets/build-tools/ets-loader/node_modules/typescript" ``` 该检查加载实际业务代码,使用可控时间覆盖推荐时效边界、时钟回拨、城市保护、失效站点、会话保护、撤销连续性、未完成片段保存、回退多段、历史撤销保护、换乘来源及记录导入导出;导航检查覆盖父页面顺序、重复点击、参数复制/校验、容器解绑和计时页可见性,并核对手机页面注册。不代替 HarmonyOS 设备上的界面、文件存储和后台行为验证。 备份检查加载实际编解码、存储、备份及文件选择器工具代码,使用隔离临时文件和平台适配器模拟短写、同步/重命名失败、损坏数据与恢复回滚,以及稳定标识、线路修改、查询条件、连续/临时计时、记录补充及编辑草稿的备份/重启恢复;覆盖大快照私有文件、引用回滚、读取校验、旧格式兼容及过期队列不覆盖完整恢复。冷启动时必须等数据加载完成才允许开始计时或恢复编辑。系统入口检查加载实际实时窗和会话同步代码,模拟系统开关、准入错误、系统移除、后台创建保护、停止失败重试、临时测量文案、系统入口参数及实际通知按钮发布;备份检查还覆盖快捷动作冷启动等待、重复投递拒绝和旧会话保护。领域检查共 123 项、备份/文件检查共 96 项、系统入口检查共 15 项;不代替 HarmonyOS 真机上的磁盘故障、系统服务、系统外观及跨设备验收。 编辑逻辑检查共 34 项:执行实际主编辑页及表单的初始化、输入变化、返回、舍弃和保存方法,验证未填完文本、原输入基线、毫秒精度、记录/显示名称版本冲突、冷加载门控、连续返回和存储失败重试;涵盖新增表单、迟到粘贴不覆盖新输入、名称确认/局部舍弃、冲突退出,以及重试不重复添加城市/线路/站点。运行时移除 ArkUI 的 `build()` 声明并适配原生界面/存储入口,因此不能替代设备布局、键盘、手势和朗读验证。 外观检查核对两套颜色资源、实际线路颜色函数的稳定映射、主要颜色组合的对比度、页面/弹窗/卡片使用资源色,以及系统栏、Canvas、字号配置和可访问性标签的接入。共 24 项;其中布局与标签接入属于源码检查,不能代替设备上的视觉、朗读与触控验收。系统适配参考:[资源分类与访问](https://developer.huawei.com/consumer/en/doc/harmonyos-guides-V2/resource-categories-and-access-0000001544463977-V2)、[支持适老化](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkui-support-for-aging-adaptation)、[屏幕朗读适配](https://developer.huawei.com/consumer/en/doc/harmonyos-guides-V14/screen-reading-adapt-guide-V14)。 ### 未完成编辑与本机快照 - 线路编辑、记录编辑/手动添加、临时记录补充、新增城市及新增线路自动保存本机草稿。记录表单保留原始输入,包括未填完的时长和备注;线路草稿同时保存已确认的站序/状态/交路修改及尚未确认的名称输入。 - 名称输入使用独立子页面,返回保留输入,在主线路编辑页点「继续名称编辑」恢复;点击确定更新线路草稿,主页面保存后应用到正式目录。舍弃单次名称输入保留其他线路修改;整份线路草稿的舍弃移除该线路所有未保存修改。 - 新增线路支持每行一站及空格/逗号等分隔,`*` 表示未开通站,预览显示站序和运营数量。重复站名(包括运营/未开通重复)会阻止添加;环线至少 3 个不同站,首站只写一次。粘贴只回填表单并保存草稿,支持多行站点;未提供环线字段时保留原开关。 - 返回等待已提交的本机写入,保留草稿;首页「继续编辑」和「设置 → 未完成编辑」可恢复或明确舍弃。写入失败显示重试入口,编辑页不自动退出;草稿不参与正式线路或统计。 - 恢复保留编辑开始时的原数据版本及原输入基线。原记录、线路或显示站名已变化时,旧草稿无法覆盖新的保存;可先查看旧草稿,再舍弃并重新编辑。已删除目标的草稿保留在列表中,由用户处理。 - 完整备份包含编辑草稿;旧备份缺少草稿字段时恢复为空列表。草稿只保存在应用私有目录,卸载会清除,可导出完整备份留存。 - 较小的数据快照兼容原 preferences 内联 JSON;超过 6000 UTF-8 字节时,使用私有 `files/metro_data` 校验文件,先完成写入、同步、重命名及回读校验,再切换 preferences 中的短引用。成功后保留当前和上一文件版本,写入失败不替换原引用;启动同时支持两种快照格式。 ### 临时测量与待补充记录 - 计时页点「临时测量 · 无需线路」,沿用当前开始相位直接走表,路线选择保持不变。到达/发车保存当前区间/停靠后继续;「保存并结束」保留最后未完成片段。后台系统入口使用临时测量文案。 - 待补充记录使用 `pending: true`,线路与站点保持空值,统计与指定区间查询排除这些记录。记录页的「待补充」入口不受已有城市/线路筛选限制,防止未归属记录被隐藏。 - 选择实际城市、线路、交路及起终点(停靠只需一个站点)后保存,测量 id、毫秒耗时、原始时间、会话顺序和撤销/垃圾箱状态保持;不改变当前计时路线。本轮仍在计时时禁止补充本轮记录,避免与撤销续计冲突。 - 临时会话、未归属记录及其状态支持本地重启、导入/导出和完整备份;更早数据缺少这些字段时默认为普通线路测量。普通记录编辑时,未改变分钟/秒数的情况下保留实测毫秒,明确修改时长时按输入保存。 ### 指定区间的测量口径 - 从统计页的「指定区间」进入,可查询任意两个不同站点。默认仅累计行驶,开启「包含中间停靠」后累计途中停站;两端站的停靠和换乘均不计入。 - 单条直接测量独立计入;跨多站只组合明确属于同一轮、顺序连续、站点相接的行驶/停靠交替记录。缺段、撤销/垃圾箱、换乘、改线、重走、矛盾顺序、时钟回拨或超过 1 秒的相位交接间隔不拼接。 - 新记录新增 `sessionId` 和 `sessionOrder`,计时会话及导入/导出/备份保留这些字段。更早记录保持空会话标识和顺序 `-1`,可查询原始区间,不以相近时间猜测跨站行程。 - 区间样本及明细为只读计算结果,不创建新的计时记录;均值、方差和分布使用选定的行驶/停靠口径。中位数、P90/P95 使用线性插值,方差/标准差使用总体口径。 - 查询条件随完整备份保存;旧备份缺少查询字段时使用默认值。删除后的历史站点/线路标注「历史」,与后来重建的同名站点/线路分开选择。 ### 线路编辑与历史记录迁移 - 「设置 → 线路管理 → 线路详情 → 编辑线路」支持本机修改,草稿保存前不会改变记录或线路目录。 - 历史记录新增 `lineId`、`fromStationId`、`toStationId`、换乘来源线路标识和 `identityVersion`。旧记录只迁移一次;无法确认的旧站保留名称,不在后续新增同名站时重新关联。 - 原始名称仍作为记录时的快照保存;页面按标识解析当前名称。更名、调整站序不改变历史统计分组,删除后重建同名站或线路使用新标识。旧记录的推断方向在迁移时固定,后续站序变化不重算历史方向。 - 内置线路的本机版本使用同一线路标识覆盖显示,不增加重复线路;「恢复预置」只移除本机版本,已有记录保留。新增站点、删除后同名重建的自定义线路使用新标识。 - 完整备份包含本机线路版本和记录标识;JSON/JSONL 线路导出保留标识。普通线路导入跳过已存在的名称/标识,完整备份恢复用于替换本机版本。更早备份缺少标识字段时仍可读取并迁移。 ### 第一批用户反馈(13 项) **12 项已完成**(含下列 E 的简易替代版),仅余 GPS 定位版待后续评估: - [x] ~~E 定位功能(简易替代版)~~ —— **已实现(无 GPS)**:`常用 / 上次起始站一键回填` + `最近使用线路快捷入口`,零权限、零坐标数据,见「计时页 · 快捷回填」。 - [ ] **E 定位功能(GPS 版)**(用户反馈:*根据定位推荐起始站* / *根据定位自动记录发车和停靠时长*)——暂缓,待后续评估。两项硬约束: 1. **缺站点坐标数据**:内置约 1900 个站点暂无经纬度,「定位推荐起始站」需先补齐坐标(可先只做少数城市主要线路);并需申请 `ohos.permission.LOCATION`(user_grant,可正常申请)。 2. **地铁场景限制**:「定位自动记录发车/停靠」需持续后台定位 + 速度/停留检测,隧道内基本无 GPS,可行性与耗电均存疑。