Android-App, die warnt, sobald der UV-Index am eigenen Standort einen einstellbaren Wert erreicht (Standard: 4). Kein Konto, kein API-Schlüssel, kein eigener Server.
📲 UV-Warner.apk herunterladen — Installation aus unbekannter Quelle bestätigen. Ab Android 8.
🌐 Web-App öffnen — läuft im Browser, auch am iPhone; über „Zum Home-Bildschirm hinzufügen" wie eine App nutzbar. Gleiche Anzeige und minutengenaue Schwellenzeiten; warnen kann der Browser aber nur, solange die Seite offen ist — für Warnungen im Hintergrund die Android-App verwenden.
Zwei Bildschirme: vorne nur der Zustand, alles Einstellbare dahinter.
- Start — Ort, großer Ring mit dem aktuellen Wert und der WHO-Kategorie, eine Zeile Empfehlung, Tages- und Morgen-Zusammenfassung, Balkenverlauf der nächsten 12 Stunden. Zum Aktualisieren nach unten ziehen.
- Einstellungen — Warnungen an/aus, Schwelle per Schieberegler, Prüfintervall, Akku- und Hintergrund-Standort-Hinweise.
Material 3, hell und dunkel; ab Android 12 übernimmt die App die Systemfarben.
- Aktueller UV-Index für den per GPS/Netz ermittelten Standort, mit WHO-Kategorie (niedrig · mäßig · hoch · sehr hoch · extrem) und Schutzhinweis
- Warnung ab Schwellwert — Standard 4, einstellbar von 1 bis 11
- Vorwarnung bis zu drei Stunden bevor die Schwelle erreicht wird
- Minutengenaue Schwellenzeiten: „Über UV 4 von 10:37 bis 16:12" — interpoliert aus 15-Minuten-Daten statt auf volle Stunden gerundet
- Weckalarm zur Kreuzungszeit: die App stellt sich einen exakten Alarm auf den berechneten Zeitpunkt — die Warnung kommt auf die Minute, nicht erst beim nächsten Prüfintervall
- Vorwarnzeit einstellbar (Aus / 30 / 60 / 180 Minuten) — auch die Vorwarnung kommt per Weckalarm pünktlich
- Hauttyp-Einstellung (I–VI): zeigt die ungefähre Eigenschutzzeit ungeschützter Haut („ca. 20 Min.")
- Fester Ort statt GPS wählbar (Ortssuche) — praktisch für Urlaub
- Homescreen-Widget mit aktuellem Wert in der Kategorie-Farbe
- Update-Hinweis: die App prüft täglich das neueste GitHub-Release
- Deutsch und Englisch (folgt der Systemsprache)
- Tagesübersicht: von wann bis wann die Schwelle überschritten wird, Höchstwert und Uhrzeit
- Morgen-Vorschau mit Höchstwert und ab wann die Schwelle fällt
- Balkenverlauf der nächsten 12 Stunden in 30-Minuten-Schritten
- Hintergrundprüfung über WorkManager, Intervall wählbar (15 / 30 / 60 / 180 Minuten), übersteht Neustarts
- Offline brauchbar: der letzte Stand wird gespeichert und beim Öffnen sofort angezeigt — inklusive Stundenverlauf
- Keine Google-Play-Dienste nötig (reiner
LocationManager)
Gewarnt wird jeweils einmal pro Überschreitung — erst wenn der Wert wieder unter die Schwelle fällt, ist die nächste Warnung möglich. Die Vorwarnung kommt höchstens einmal pro Tag.
Sparsam mit Akku und Datenvolumen: nachts wird gar nicht erst abgerufen, wenn die gespeicherte Vorhersage für die nächsten Stunden ohnehin 0 sagt. Beim Öffnen der App wird nur nachgeladen, wenn der letzte Abruf über 10 Minuten zurückliegt. Ein fehlgeschlagener Abruf wird einmal wiederholt.
Open-Meteo (uv_index, Basis CAMS/ECMWF) — frei
nutzbar ohne Schlüssel. Abgerufen wird in 15-Minuten-Auflösung
(minutely_15); liefert die Schnittstelle das für einen Standort nicht,
fällt die App automatisch auf Stundenwerte zurück. Es werden ausschließlich
Breiten- und Längengrad an Open-Meteo übertragen; die Position bleibt sonst
auf dem Gerät.
| Berechtigung | Wofür |
|---|---|
| Standort (grob/genau) | UV-Index für die aktuelle Position |
| Standort im Hintergrund | optional — sonst nutzt die Hintergrundprüfung die zuletzt in der App ermittelte Position |
| Benachrichtigungen | für die Warnung selbst (Android 13+) |
| Internet | Abruf der UV-Daten |
| Neustart empfangen | Prüfung nach Reboot wieder aktivieren |
./gradlew testDebugUnitTest # Warnlogik und Auswertung der API-Antwort
./gradlew assembleRelease
# → app/build/outputs/apk/release/app-release.apkVoraussetzungen: JDK 17, Android SDK (compileSdk 35). minSdk 26 (Android 8).
Die Entscheidung „wird gewarnt?" steckt in UvWarningLogic
— bewusst ohne Android-Abhängigkeiten, damit sie als reiner Unit-Test prüfbar
ist (Schwellenüberschreitung, Vorwarnfenster, Doppelmeldungen, Nachtabschaltung).
Der Workflow build.yml baut die APK bei jedem
Push und legt sie als Artefakt UV-Warner-APK ab. Ein Release mit
UV-Warner.apk entsteht auf zwei Wegen:
- Tag
v1.0pushen — Release unter genau diesem Tag, oder [release]in der Commit-Nachricht — der Tag wird ausversionNamegebildet und von der Action selbst angelegt.
Ohne hinterlegten Schlüssel wird mit dem Debug-Schlüssel signiert — die APK ist installierbar, aber jedes Build hat eine andere Signatur, ein Update darüber lehnt Android ab. Einmalig einen Schlüssel erzeugen …
keytool -genkeypair -v -keystore uvwarner.jks -alias uvwarner \
-keyalg RSA -keysize 2048 -validity 10000
base64 -w0 uvwarner.jks # Ausgabe kopieren… und als Repository-Secrets hinterlegen:
| Secret | Inhalt |
|---|---|
UV_KEYSTORE_BASE64 |
Base64 der .jks-Datei |
UV_KEYSTORE_PASSWORD |
Keystore-Passwort |
UV_KEY_ALIAS |
uvwarner |
UV_KEY_PASSWORD |
Schlüssel-Passwort |
Sind die Secrets gesetzt, signiert der Build automatisch damit.
Android verzögert Hintergrundarbeit im Energiesparmodus. Für pünktliche Warnungen sollte die App in den Systemeinstellungen von der Akku-Optimierung ausgenommen werden — der Knopf dafür ist in den Einstellungen der App.
Angaben ohne Gewähr — die App ersetzt keine amtliche UV-Warnung.