它只做一件事:把你的位置发到一个地址。位置存在哪儿、谁能读,由你自己决定。
位置数据只存在你自己的服务器上。App 里没有我们的服务器,也没有任何第三方服务——「服务器地址」和「口令」来自你自己的后端,定位数据从手机直接进你的库。
所以第一次打开「位置共享」页时,你得先有一个地址和一个口令。三种情况:
填进 App 的「位置共享」页,点「测试连接」确认通了,就能开始记录。
如果后端是别人搭的(比如家人),向他要服务器地址和口令即可。
后端 here-server 开源(Rust + SurrealDB),docker compose up 起服务,创建一个用户拿到口令。
从定位采集到上报校验,从电量保护到接入自检,覆盖完整的上报链路。
通过 ContinuousLocationRequest 由系统推送定位回调(默认 5 分钟一次,可调),再以 HTTP POST 把坐标发到你的服务器。
通过 backgroundTaskManager 与 LOCATION 后台模式建立长时任务,锁屏及切换应用后持续定位不中断。
电量 ≤20% 时上报间隔自动放宽到 15 分钟;≤10% 时跳过上报,把电留给你自己。
上报失败自动重试 3 次,间隔分别为 30 秒、60 秒、120 秒,确保数据可靠送达。
主页地图显示实时定位蓝点,面板显示最新经纬度与距上次上报的时长,运行状态一目了然。
定位间隔在设置页调整,服务器地址与上报口令在「位置共享」页配置,全部持久化存储。
先前台定位、再后台定位分步授权;被拒绝时引导跳转系统设置页重新开启。
HDS 沉浸光感标题栏与底部玻璃面板,配合三态操作按钮与涟漪动效,状态切换清晰直观。
「测试连接」做只读探测、不写数据,保存后还会自动再验一次;地址填错或反代把请求跳走时,会直接告诉你「返回的不是服务接口」,而不是假装上报成功。「位置共享」页内置两篇部署帮助。
手机负责采集与上报,你自己搭的后端负责接收与存储,AI Agent 通过 MCP 按需读取。
get_locations 工具读取你自己服务器上的位置数据,回答「他现在在哪」这类问题。
App 只认这个契约,自己写后端照这个实现即可;here-server 已经实现好了。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
lat | number | 是 | 纬度(WGS84),范围 [-90, 90] |
lon | number | 是 | 经度(WGS84),范围 [-180, 180] |
timestamp | number | 是 | Unix 时间戳(秒) |
source | string | 是 | 固定值 "harmonyos" |
accuracy | number | 否 | 定位精度(米),无则 -1 |
altitude | number | 否 | 海拔(米),无则 -1 |
speed | number | 否 | 速度(米/秒),无则 -1 |
| 响应 | App 的行为 |
|---|---|
200 且响应体是 JSON | 上报成功(here-server 返回 {"ok":true,"count":n}) |
200 但响应体不是 JSON | 判定失败并重试——跟随重定向后从网页拿到的 200 就属于这种 |
401 | 口令无效,不可重试 |
422 | 请求体格式错误(缺字段、类型不对),不可重试 |
5xx / 超时 / 网络异常 | 进入重试:最多 3 次,间隔 30 / 60 / 120 秒 |
为什么光看 200 不够。HTTP 客户端默认跟随重定向:如果这个地址被反向代理的兜底规则或 CDN 301 到某个网页,请求最终也会拿到 200。所以 App 还会看一眼响应体——必须是接口返回的 JSON(以 { 或 [ 开头)才算成功。这条规则来自一次真实事故:地址没配好,请求一路 301 到博客首页拿到 200,App 显示「上报成功」,数据其实一条都没进库。
返回该口令对应的最近记录(JSON 数组)。不写入任何数据——App 的「测试连接」用的就是这个接口,所以可以在设置页随便点。
手机端不开源,你不需要编译任何东西:准备好后端 → 装上 App → 填地址和口令。
自己部署 here-server(开源,docker compose up 起服务,再创建用户拿到口令),或者向已经有后端的人要「服务器地址 + 口令」。没有后端,App 装上也收不到数据。详见 如何部署后端服务。
「设置 →「位置共享」」填服务器地址与口令,点「测试连接」看到「连接正常,口令有效」再保存(保存后也会自动再验一次)。回到主页点「开始记录」,按提示依次授权前台与后台定位权限。
| 操作 | 方式 |
|---|---|
| 开始追踪 | 主页点击「开始记录」,按提示依次授权前台与后台定位权限 |
| 停止追踪 | 主页点击「停止记录」(划掉任务通知或卡片也会停止,且不会自动恢复) |
| 修改定位间隔 | 点击右上角齿轮图标进入设置页,选择「定位间隔时长」(≥ 1 分钟;低电量时自动放宽到 15 分钟) |
| 配置服务器与口令 | 设置页 →「位置共享」,填写服务器地址与口令后保存;页面顶部有三条路提示,指明地址和口令该从哪来 |
| 测试连接 | 位置共享页点「测试连接」做只读校验(不写数据);保存后也会自动校验一次并回显结果 |
| 看部署帮助 | 「位置共享」页内置两篇帮助文章,应用内直接阅读:为什么需要后端服务 / 如何部署后端服务 |
| 后台权限被拒 | 应用弹窗提供「去设置」入口,可直接跳到系统设置开启后台定位 |
| 项目 | 要求 |
|---|---|
| 系统 | HarmonyOS 6.1 及以上,需 API Level 24(设置里看不到 API level,装不上基本就是这一步不够) |
| 设备 | 华为手机 |
| 后端 | 你自己的服务器(本机、内网或公网均可),或别人给你的账号 |
| 网络 | 手机需能访问到那个地址:同一 Wi-Fi、组网(Tailscale 等)或公网 + HTTPS |
| 开源情况 | 手机端闭源;后端 here-server 开源 |
国冰,独立 AI 开发者。「我在这里」这个 App 是我自己写的;配套的后端服务开源(Apache-2.0)。
如果你在 AI 落地——智能体、自动化、视觉检测——上有想法但不知道怎么开始,欢迎来聊。首次沟通 15 分钟,初步判断场景能不能落地,不收费。