「我到底去过哪些地方」这个问题,我用HarmonyOS/iOS做了个App解决了
起因:一张照片引发的开发念头
去年十一月从成都出差回来,我翻相册想确认自己到底去没去过那条巷子。照片里有火锅、有招牌,但我死活想不起那是哪条路。打开高德看收藏,空的。翻大众点评历史订单,只有两家餐厅。那种感觉很奇怪——我确实到过很多地方,但没有任何一个工具能帮我「证明」这件事。
作为一个独立开发者,我的第一反应是:这事儿能不能自己做一个?
我调研了一圈市面上有足迹功能的 App,发现它们要么藏在运动记录的配速和心率数据里,要么挂在社交平台等你发布打卡。我的需求其实很简单:一张安静的地图,上面填满我走过的地方。不需要配速,不需要社交,不需要任何主动操作。
于是「雁过留痕」这个项目就启动了。目前已经在 iOS 平台上架 App Store,HarmonyOS NEXT 版本也在适配中。
核心思路:自动记录 + 地图着色
整个 App 的设计逻辑非常克制。打开授权定位之后,用户几乎不需要再做任何操作。走路、骑车、坐地铁、开车——只要在移动,App 在后台默默记下轨迹。回到家打开看一眼,今天走过的街道已经被着色了。
地图的呈现方式很直觉:到过的区域有颜色,没去过的地方留白。日积月累之后,你会看到自己生活的城市从中心向外一点点「长」出来。出差或旅行去了新城市,那块地图也会亮起来。整体像是一个缓慢填色的游戏,只不过填色的颜料是真实走过的路。
这里我想强调一点:雁过留痕不是运动 App。它不记录配速,不统计卡路里,不分析步频。定位非常窄,就是「记录去过的地方」。这种克制让整个 App 的使用心智极低——不用「开始运动」也不用「结束运动」,没有任何需要主动触发的操作。
技术实现上的一些选择
做这个项目过程中,有几个技术决策我觉得值得聊聊。
首先是后台定位的功耗控制。三周实际使用下来,电池设置里后台耗电占比大概在 3%-5%,对续航几乎没有可感知的影响。这和只采集位置信息、不做复杂计算有关。在 iOS 端我用的是系统级的持续定位能力,HarmonyOS 端适配时会用到 geoLocationManager 的持续定位模式:
import { geoLocationManager } from '@kit.LocationKit';
let requestInfo: geoLocationManager.LocationRequest = {
priority: geoLocationManager.LocationRequestPriority.LOW_POWER,
scenario: geoLocationManager.LocationRequestScenario.DAILY_LIFE_SERVICE,
timeInterval: 10,
distanceInterval: 50
};
geoLocationManager.on('locationChange', requestInfo, (location) => {
// 将坐标写入本地数据库,用于轨迹着色
this.saveTrackPoint(location.latitude, location.longitude, location.timeStamp);
});
```
这里 `distanceInterval` 设成 50 米是一个平衡点——太小会频繁唤醒导致耗电,太大会丢失路径细节。实际体验下来 50 米粒度足够还原出「走过这条路」的信息。
另一个技术选择是轨迹着色方案。比起在地图上打圆点标记的方案,我用的是路径着色。区别在于:圆点告诉你「到过这个坐标」,着色告诉你「走过这条路」。后者的信息密度更高,看起来也更像是一张有故事的图。你能分辨出自己是沿着河边绕了一圈,还是穿过了老城区的几条窄巷。
关于数据存储:所有轨迹数据存在本地。没有账号体系,没有社交功能,没有「分享到朋友圈」的按钮。足迹数据属于非常私密的信息,我不想让它躺在某个服务器上。HarmonyOS 版本计划用分布式数据管理能力做多设备同步,但依然是端到端的,不经过云端。
## 几个有意思的产品细节
像素风地图是我个人最喜欢的一个模式。把城市变成一个个小方格,走过的格子亮起来,没走过的保持灰暗。这个模式特别适合截图——我上周 Citywalk 走了一条环形路线,截图出来像是在城市里画了一个圈,发给朋友看的时候效果很好。如果刻意规划路线,甚至能在地图上走出特定图案。
时间维度的筛选也是一个重要功能。可以按天、按月、按年查看足迹。这意味着能对比「去年我在这个城市走过哪些地方」和「今年又多覆盖了哪里」。对于长期住在一个城市的人来说,这种时间尺度的对比很有趣——你会发现自己的活动半径比想象中小得多,或者某次周末闲逛其实比日常通勤探索了更多的区域。
全自动记录这一点解决了我之前用其他工具的最大痛点。试过其他几款有足迹功能的工具,有些需要手动开始记录,有些需要签到打卡。稍微忘记一次,那段路就空了。当然代价是需要「始终」定位权限,这一点在首次使用时需要授权。
## 实际使用三周的感受
说实话,中间很多天完全忘记它在运行。某天下午突然想起来点开看,发现前两天去朋友家那条从没走过的路已经被记录下来了。这种「被动积累、主动回顾」的节奏很舒服——不打扰你,不推送提醒,不要求每天打卡。
它适合经常出差、喜欢城市漫步、或者单纯想知道「我这辈子的脚步覆盖了多少地方」的人。给你的不是运动成绩,不是旅行攻略,只是一张慢慢被填满的私人地图。
不适合的场景也很明确:如果要分析跑步数据、规划骑行路线、或者和朋友比拼运动量,请用专门的运动 App。雁过留痕不做这些,也不打算做这些。
## 获取方式
iOS 平台,App Store 搜索「雁过留痕」即可下载。HarmonyOS NEXT 版本在适配开发中。
如果你也在做鸿蒙开发,特别是涉及持续定位、地图渲染这块的,欢迎交流。ArkUI 在自定义地图绘制上的表现力比我预期的要好,后续打算单独写一篇聊聊 HarmonyOS 端地图着色的 Canvas 实现思路。
更多推荐


所有评论(0)