A simple, offline-first location reminder and geofence alarm app for Android that doesn't use Google Play Services or track you. Built with Jetpack Compose and OpenStreetMap (osmdroid). A privacy-friendly, de-googled alternative to Google Keep location alerts for commuters and travelers.
I built this because most geofence reminder apps either depend on Google Play Services, require an account, upload your coordinates to a server, or just show a quiet notification that you miss while commuting. GeoReminder works completely offline, can trigger a full-screen alarm like a wake-up clock, and lets you download map tiles so you don't need mobile data.
- Offline maps: Uses OpenStreetMap tiles. You can select an area on the map and pre-download tiles up to zoom level 16 for offline trips.
- Notification or loud alarm: Choose between a normal heads-up notification or a full-screen alarm (uses the alarm audio stream, wakes the screen, and bypasses silent mode).
- Custom trigger radius: 50m to 5km slider with real-time visual circle on the map.
- Jitter protection: Includes a hysteresis buffer (~25% + 30m) so walking along the edge of a zone won't re-trigger the alarm repeatedly.
- Battery-friendly foreground service: Runs a persistent foreground service with low-frequency GPS polling while moving and stops waking when reminders are disarmed.
- No accounts, no telemetry: Reminders and downloaded tiles are stored locally in app storage.
Get the latest signed APK from the Releases page:
GeoReminder-v1.0.0-Release.apk(signed with debug fallback, ready to sideload)- Or install via ADB:
adb install -r app/build/outputs/apk/release/app-release.apk
Android is strict about background location. For GeoReminder to reliably ring when you arrive somewhere:
- Location ("Allow all the time"): Needed so the foreground service can check your distance to saved pins when the screen is off or another app is open.
- Alarms & Reminders: Needed on Android 12+ (
SCHEDULE_EXACT_ALARM) so snooze timers and alarm triggers fire at the exact second. - Battery Optimization: Open the in-app "Engine" tab and disable battery optimization for GeoReminder. Aggressive OEM task killers (MIUI, OneUI, ColorOS) will otherwise kill the service after 15 minutes of screen-off time.
Requires JDK 17 and Android SDK 35+.
git clone https://github.com/Prashithshetty/GeoReminder.git
cd GeoReminder
# Run tests
./gradlew testDebugUnitTest
# Build APKs
./gradlew assembleReleaseThe APK will be generated at app/build/outputs/apk/release/app-release.apk.
To sign with your own keystore:
export KEYSTORE_FILE="/path/to/keystore.jks"
export KEYSTORE_PASSWORD="password"
export KEY_ALIAS="alias"
export KEY_PASSWORD="password"
./gradlew assembleReleaseIf no keystore variables are provided, the release build automatically falls back to debug signing so the APK can be sideloaded immediately.
- UI: Jetpack Compose, Material 3
- Map engine: osmdroid 6.1.18
- Background: Android Foreground Service + AlarmManager + WakeLock
- Architecture: Single-activity, unidirectional state flow, coroutines
Apache 2.0. Map data © OpenStreetMap contributors.