Skip to content

Repository files navigation

☀️ UV-Warner

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.

Oberfläche

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.

Funktionen

  • 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.

Datenquelle

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.

Berechtigungen

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

Bauen und testen

./gradlew testDebugUnitTest      # Warnlogik und Auswertung der API-Antwort
./gradlew assembleRelease
# → app/build/outputs/apk/release/app-release.apk

Voraussetzungen: 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).

Releases

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.0 pushen — Release unter genau diesem Tag, oder
  • [release] in der Commit-Nachricht — der Tag wird aus versionName gebildet und von der Action selbst angelegt.

Eigener Signaturschlüssel (nötig für Updates ohne Deinstallation)

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.

Zuverlässigkeit der Warnungen

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.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages