Me pasa que salgo a caminar y recién a medio camino me acuerdo de darle a «iniciar». Google Fit cuenta lo que caminé antes porque registra los pasos todo el día, pero en Strava ese tramo se pierde.
km 0 es una app de Android para grabar caminatas, carreras y salidas en bici, al estilo de Strava, que arregla eso. Si empezaste a grabar tarde, busca en Health Connect lo que hiciste en las tres horas anteriores y lo pega al principio de la actividad, con la placa KM 0 donde de verdad saliste.
En las capturas: grabando, con «Empecé antes» a mano; lo que encontró Health Connect antes del inicio; el tramo marcado con un toque en el mapa; las cifras con ese tramo sumado, y la actividad guardada con la corrección.
Graba con la pantalla apagada o con otra app abierta, con un aviso fijo en la barra mientras dura, y muestra el tiempo, la distancia y el ritmo. Cada punto se escribe en un archivo apenas llega: si Android cierra la app a mitad de camino, al volver a abrirla la actividad se guarda con lo que había.
Las actividades se ven en una lista con la forma de cada recorrido y, al abrir una, con su mapa y sus cifras. Se exportan a GPX, para subirlas a Strava o a otra app, o se mandan con el menú de compartir de Android.
El inicio se corrige en plena grabación, con el botón «Empecé antes», o después, desde la actividad guardada. km 0 lee de Health Connect las tres horas anteriores y propone lo que encuentre:
- Un recorrido con GPS guardado por otra app (Google Fit, Samsung Health, Fitbit…). Sale en el mapa y arrastras la placa hasta donde saliste.
- Tus pasos minuto a minuto. Con ellos calcula a qué hora empezaste a caminar y cuánto caminaste, y tú tocas en el mapa de dónde saliste.
- Si no hay nada, lo dibujas.
Con «Seguir las calles» activado, el tramo va por el camino a pie de OpenStreetMap y basta con un toque en el punto de salida. En plena grabación, las cifras empiezan a contar ese tramo en el acto y se guarda al terminar. La corrección se puede deshacer.
Con el recorrido de otra app, toma los puntos anteriores a tu inicio y busca la última vez que estuviste quieto: dos puntos seguidos a menos de 30 m y con más de 2 minutos entre uno y otro. Con los pasos, retrocede minuto a minuto desde el inicio mientras haya al menos 20 pasos por minuto, y perdona hasta 2 minutos sin pasos (un semáforo, una tienda). A un tramo dibujado le reparte las horas desde la hora en que tus pasos dicen que empezaste o, si no la hay, a tu ritmo.
Los detalles, con las decisiones y los problemas que salieron al probarla, están en docs/como-funciona.md.
No hay cuentas ni servidor propio: las actividades se quedan en el teléfono. De Health Connect solo lee sesiones de ejercicio, pasos y distancia, y los recorridos que guardaron otras apps necesitan un permiso aparte. Lo único que sale del teléfono, y solo si activas «Seguir las calles», son los puntos del tramo recuperado, que van al servidor de rutas de OpenStreetMap. El mapa se descarga de OpenFreeMap.
Svelte 5 y MapLibre GL dentro de Capacitor 8.
Lo nativo está en Kotlin, en android/app/src/main/java/dev/yoiber/km0/:
| Archivo | Para qué |
|---|---|
GrabadoraService.kt |
La grabación, en un servicio en primer plano. Escribe cada punto en grabacion.jsonl. |
GrabadoraPlugin.kt |
Lo que la parte web le pide a la grabación: permisos, iniciar, pausar, terminar, recuperar una grabación interrumpida. |
Ubicador.kt |
La posición, con la ubicación combinada de Google (GPS, wifi y antenas). |
SaludPlugin.kt |
Health Connect: sesiones con su recorrido, pasos y distancia por minuto, permisos. |
PrivacidadActivity.kt |
La pantalla que Health Connect exige para explicar el uso de los datos. |
ArchivosPlugin.java |
Guardar el GPX con el diálogo «Guardar como» del sistema. |
Y la parte web, en src/:
| Archivo | Para qué |
|---|---|
lib/grabacion.svelte.js |
El estado de la grabación, que sigue al día aunque cambies de pantalla. |
lib/tramo.js |
Desde dónde saliste: el recorrido, los pasos o el dibujo. |
lib/streets.js, lib/geo.js |
Pegar el tramo a las calles con OSRM y repartirle las horas. |
lib/actividades.js |
Guardar las actividades, sus cifras y el GPX. |
map/Mapa.svelte, map/style.js |
Un solo mapa para todas las pantallas, con el estilo «positron» de OpenFreeMap repintado como un plano en papel. |
screens/ |
Grabar, la lista, el detalle y la corrección del inicio. |
npm run dev abre la app en el navegador con imitaciones del GPS y de Health Connect. Al iniciar se
reproduce una caminata por el malecón de Miraflores, y en «Health Connect» hay otra caminata que
termina justo antes. Los datos salen de scripts/ejemplo.mjs, y npm run ejemplo los regenera.
En el APK de pruebas, si Health Connect no tiene nada, aparece «Prueba: guardar una caminata de ejemplo en Health Connect», que escribe una caminata que termina donde empezaste a grabar.
Hace falta Node 22 o más nuevo, el JDK 21 y el SDK de Android.
npm install
npm run build
npx cap sync android
cd android && ./gradlew assembleDebugEl APK queda en android/app/build/outputs/apk/debug/app-debug.apk y se instala con
adb install -r app-debug.apk. Graba desde Android 8. Health Connect viene con Android 14; en
versiones anteriores se instala desde Google Play, y sin él el tramo de antes se dibuja.
Solo hay versión para Android, porque Health Connect no existe en iPhone. No está en Google Play.
km 0 is an Android activity recorder for walks, runs and rides, in the spirit of Strava, built with Svelte 5, MapLibre and Capacitor plus custom Kotlin plugins. It adds one feature: if you hit start late, it reads the previous three hours from Health Connect (another app's GPS route, or per-minute step counts) and prepends the missing stretch, snapped to streets with OSRM. Recording runs in a foreground service and survives the app being killed. Activities export to GPX. The app and the docs are in Spanish.




