我做了一个鸿蒙App,把每天的通勤路变成像素地图养成游戏
·
起因:通勤太无聊,但我不想用社交运动App
昨天下班走地铁站那段路,手机弹了个通知:「恭喜,你的通勤路已升级为金色大道」。愣了一下,然后嘴角翘起来了。这个瞬间让我觉得这几个月的开发没白费。
这个 App 叫「像素征途」,逻辑很简单:你走过的地方,地图上对应的像素格子就会被点亮。走得越多,亮得越多。同一条路反复走,格子会从普通色慢慢升级成金色。我每天通勤那条路现在已经是一条闪闪发光的金色大道了,看着莫名有成就感。
它解决的痛点挺明确的:日常出行太无聊了,但又不想被那些社交运动 App 绑架。不想比配速,不想发动态,就想安安静静把自己走过的路攒起来。
技术实现:HarmonyOS 定位服务 + ArkUI 像素渲染
在 HarmonyOS 上做位置类应用,绕不开 geoLocationManager 这套 API。我做了三档功耗策略切换,核心是通过调整定位请求的参数来控制精度和频率:
// 三档定位策略切换
function setLocationMode(mode: string) {
let request: geoLocationManager.LocationRequest = {
priority: mode === 'continuous'
? geoLocationManager.LocationRequestPriority.FIRST_FIX
: geoLocationManager.LocationRequestPriority.LOW_POWER,
timeInterval: mode === 'balance' ? 10 : mode === 'continuous' ? 3 : 30,
distanceInterval: mode === 'balance' ? 20 : mode === 'continuous' ? 5 : 50
}
geoLocationManager.on('locationChange', request, onLocationChange)
}
```
省电/平衡/持续三档,平时通勤我开平衡档,一天下来电量感知不明显。出差坐高铁我会切到持续档,实测京沪线全程没断过,下车一看沿途格子全亮了。
地图渲染这块用的是 ArkUI 的 Canvas 组件,把经纬度映射到 8×8 的网格系统里,每个格子的颜色状态存在本地数据库。HarmonyOS 的 @ohos.data.preferences 做轻量持久化刚好够用,不需要关系型数据库那么重。
## 养成系统:不氪金不肝,走路就能推进度
养成系统比我最初规划的丰富不少。有个 8×8 的领地征服玩法,还有科技树和徽章收集。比如连续7天点亮新格子会解锁「探索者」徽章,某片区域全部点亮会征服那块领地。设计思路就是不氪金不肝,日常走走就能推进度。
比如你每天骑车上班,骑了三个月回头一看,整条路线变成金灿灿的,周围还有零星点亮的格子是你周末 citywalk 探索的。这种「我的城市被我一步步走亮了」的感觉,确实会让人想继续走下去。
## 隐私策略:数据全存本地,没有服务器
这点我特别想聊一下。数据全存本地,没有服务器,开发者(也就是我)看不到你去过哪里。对于不太想让任何人知道自己行踪的用户来说,这是我认为必须坚守的底线。HarmonyOS 本身在权限管控上做得比较严格,配合纯本地存储方案,用户的位置数据不会离开设备。
## 下载和适用人群
App 免费下载,打开华为应用市场搜索「像素征途」就能找到。装好之后给定位权限,出门走就完事了,不用额外操作。
适合每天有通勤路线的人、周末喜欢溜达的人、出差多想记录去过哪些城市的人,或者单纯觉得走路缺点动力想找个不社交的小游戏玩玩的人。
如果你也在做鸿蒙开发,尤其是位置服务和 ArkUI Canvas 相关的,欢迎交流。踩过的坑不少,有些 API 的实际行为和文档描述还是有差距的,后面有空可以单独写一篇聊聊 geoLocationManager 在后台保活场景下的表现。
更多推荐



所有评论(0)