Herold ist der Kern des Projekts. Er macht zwei Dinge, die Samsung an einem iPhone nicht vorsieht: Benachrichtigungen holen und die Sensoren nutzen.
Apple dokumentiert den Apple Notification Center Service (ANCS): Ein BLE-Gerät darf sich mit dem iPhone koppeln und bekommt dann dessen Benachrichtigungen. Genau das nutzt Herold — die Uhr tritt als BLE-Gerät auf, das ANCS anfragt.
Ablauf:
Der Dienst (AncsService) läuft als Vordergrunddienst, damit Android ihn nicht
beendet, und wird zusätzlich alle zehn Minuten von einem Wächter geprüft.
Zwei Fallstricke stehen ausführlich in 07-erkenntnisse.md: Warum ein fremdes iPhone die Uhr nicht findet, und wie man die Dienst-Benachrichtigung unsichtbar bekommt.
Über das Samsung Health Sensor SDK:
| Messung | Was passiert |
|---|---|
| EKG | 30 s Herzstromkurve, 500 Hz. Kurve, Puls, Rhythmusanalyse, Poincaré-Bild. |
| Puls & Rhythmus | 150 s Schlagabstände (IBI), daraus die Rhythmusanalyse und die Atemfrequenz. |
| Sauerstoff (SpO₂) | 35 s, endet früher bei genug gültigen Werten. |
| Hauttemperatur | 12 s, plus Abweichung vom persönlichen Grundwert. |
| Körperanalyse (BIA) | 40 s, braucht Größe/Gewicht/Alter/Geschlecht im Profil. |
| Atemfrequenz | aus dem Spektrum der Schlagabstände. |
Der interessanteste Teil, und der, bei dem am meisten schiefgehen kann. Aus den Schlagabständen werden berechnet:
Der Unterschied zwischen „unregelmäßig” und „Atemarrhythmie” ist genau dieses Muster: Beim Atmen schwankt der Puls stark, aber rhythmisch. Ohne diese Unterscheidung meldet jede naive Analyse bei einem gesunden jungen Menschen Fehlalarm.
Die Schwellen sind nicht geraten, sondern an je 400 nachgebildeten Messreihen
abgelesen (test/Verteilung.java) und gegen echte Aufzeichnungen geprüft.
Wortlaut ist Absicht: kein Krankheitsname, keine Entwarnung, kein grüner Haken. Die App sagt, was sie gemessen hat — nicht, was es bedeutet.
Blutdruck ist auf diesem Weg nicht möglich: Der Sensor steckt hinter einer Signatur-Berechtigung, und Samsung Health Monitor verlangt ein Samsung-Telefon.
Was geht: Im EKG-Datenstrom liefert das SDK im selben Datenpunkt den PPG-Grünkanal mit (100 Hz). Aus dem Abstand zwischen R-Zacke und dem Fuß der Pulswelle ergibt sich die Pulsankunftszeit — eine Laufzeit, kein Blutdruck. Genau so steht es auch in der App.
MessPlaner misst von allein, ohne den Akku zu ruinieren:
flush(), damit gestapelte Sensorwerte ankommenWLAN-Halter, Wach-Halter und die adb-Wache laufen nur am Ladekabel. Der
Ladezustand wird über den Batterie-Intent gelesen, nicht über
BatteryManager.isCharging() — das meldet beim drahtlosen Laden falsch „nein”.
Schwarzer Grund, gezeichnete Karten, eine Liste, die der Rundung des Displays
folgt (KurvenListe), und die drehbare Lünette als Scrollrad (Rad) — ohne
AndroidX, alles selbst gezeichnet. Farben und Bewegungskurven liegen zentral in
Stil.java.
cd herold && ./build.sh --selftest # bauen, installieren, starten, Screenshot
./test/oberflaeche.sh # alle Bildschirme durchklicken und prüfen
./test/pruefen.sh # Rhythmusanalyse gegen Testdaten