Skip to content

Repository files navigation

Deutsch | English | Änderungsprotokoll | TODO

DialOS Logo

DialOS Mobil

Der Handy-Ableger von DialOS: eine Android-App, mit der man allein durch Sprechen telefonieren kann. Gedacht für blinde und motorisch stark eingeschränkte Menschen, die ein Telefon nicht bedienen können – aber angerufen werden wollen und selbst anrufen möchten.

Die Erkennung läuft vollständig offline auf dem Gerät, mit derselben Engine wie der DialOS-Desktop (Vosk). Es verlässt kein Ton das Telefon, und die App funktioniert ohne Internet und ohne Google-Dienste.

Dieses Projekt ist in Zusammenarbeit mit Claude entstanden.

Bildschirmfotos

Zum Vergrößern anklicken.

Startbildschirm mit der Statusanzeige „Ausgeschaltet“ und einem großen blauen Knopf „Sprachsteuerung einschalten“
Ausgeschaltet
Startbildschirm im Gespräch, die Statusanzeige lautet „Sprachsteuerung bereit. Wen möchten Sie anrufen?“
Im Gespräch
Seite „Infos & Einstellungen“ mit Zurück-Knopf, Berechtigungen, Dauerbetrieb und drei Schaltern
Einstellungen
Derselbe Startbildschirm in der kontraststarken Fassung: schwarzer Grund, gelbe Schaltflächen
Hoher Kontrast

Das Widget auf dem Startbildschirm

Ein Balken über die volle Bildschirmbreite – für die Zielgruppe ist ein App-Symbol zwischen zwanzig anderen kein brauchbares Ziel. Ein Tippen schaltet ein und fragt sofort „Wen möchten Sie anrufen?“.

Startbildschirm mit einem breiten blauen Balken: „Antippen zum Einschalten“, darunter „Ausgeschaltet“
Ausgeschaltet
Derselbe Balken in Grün: „Antippen und sprechen“, darunter „Sprachsteuerung bereit. Wen möchten Sie anrufen?“
Eingeschaltet

Der Zustand wechselt über Farbe und Text – Farbe allein reicht nicht, wenn jemand Farben schlecht unterscheidet. Blinde Nutzer hören über TalkBack eine eigene, ausführlichere Beschreibung.

So läuft ein Anruf ab

Nutzer:  „Sprachsteuerung starten“
App:     „Sprachsteuerung bereit. Wen möchten Sie anrufen?“
Nutzer:  „Max Mustermann anrufen“
App:     „Soll ich Max Mustermann auf Mobil anrufen?
          Sagen Sie Ja oder Nein.“
Nutzer:  „Ja“
App:     „Ich rufe Max Mustermann an.“   → der Anruf startet

Eine Nummer diktieren statt einen Kontakt zu nennen:

Nutzer:  „Nummer wählen“
App:     „Bitte sprechen Sie die Nummer, Ziffer für Ziffer.
          Sagen Sie fertig, wenn Sie durch sind.“
Nutzer:  „null eins sieben neun …“
App:     „0 1 7 9 …“                     (liest nach jeder Gruppe zurück)
Nutzer:  „fertig“
App:     „Soll ich die Nummer 0 1 7 9 … anrufen?
          Sagen Sie Ja oder Nein.“
Nutzer:  „Ja“

Jederzeit möglich: „Abbrechen“, „Hilfe“, „Wiederholen“, „Sprachsteuerung beenden“. Bleibt es 15 Sekunden still, beendet die App den Dialog von selbst und wartet wieder auf das Aktivierungswort.

Funktionen

  • Aktivierungswort „Sprachsteuerung starten“ – die App hört dauerhaft im Hintergrund mit, ohne dass der Bildschirm an sein muss.
  • Kontaktsuche, die Verhörer verzeiht. Drei Verfahren greifen ineinander: wortweiser Vergleich (Nachname allein genügt), Levenshtein-Ähnlichkeit (Musterman → Mustermann) und Kölner Phonetik – damit finden Meier, Maier, Mayer und Meyer denselben Kontakt.
  • Rückfrage bei mehreren Treffern: Die App liest die Vorschläge nummeriert vor, der Nutzer sagt „eins“, „zwei“ oder den Namen noch einmal.
  • Mehrere Nummern pro Kontakt: Mobil zuerst, dann Privat, dann Arbeit. Ein „Nein“ springt zum nächsten Vorschlag statt abzubrechen.
  • Ziffern diktieren in deutscher Sprache, auch zusammengesetzt („einundzwanzig“ → 21), mit plus für die Ländervorwahl und „doppel sieben“ für 77.
  • Bestätigung vor dem Wählen (abschaltbar) – eine Fehlerkennung soll keinen Fehlanruf auslösen.
  • Vier Wege, das Gespräch zu starten: Aktivierungswort, große Schaltfläche in der App, Kachel in den Schnelleinstellungen, oder die Assistenten-Geste (die App lässt sich als Standard-Assistent setzen).
  • Autostart nach dem Neustart des Telefons.
  • Barrierefreie Oberfläche: sehr große Schaltflächen, hoher Kontrast, Statusanzeige als Live-Region – TalkBack liest jede Änderung mit vor.
  • Kontrast umschaltbar (Knopf oben rechts): schwarzer Grund mit gelben Schaltflächen für Menschen mit starker Sehbehinderung.
  • Lautstärke umschaltbar (Knopf oben links): 50 % oder volle Lautstärke. Beim Start der App werden immer 50 % gesetzt – ein zu leise gedrehtes Telefon fällt sonst erst auf, wenn die App scheinbar schweigt.

Technischer Aufbau

Baustein Aufgabe
VoiceService Vordergrunddienst, hält Mikrofon und Dialog am Leben, wählt über TelecomManager
VoiceEngine Vosk-Anbindung: Modell entpacken, zuhören, pausieren
DialogController Der Gesprächsablauf als Zustandsautomat – ohne Android-Abhängigkeiten im Kern
CommandParser Erkennt Aktivierungswort und Befehle im erkannten Text
NameMatcher Namensvergleich inkl. Kölner Phonetik
GermanNumbers Deutsche Zahlwörter → Ziffern
ContactRepository Adressbuch lesen und durchsuchen

Zwei Entwurfsentscheidungen, die nicht offensichtlich sind:

  • Freier Wortschatz statt Grammatik für das Aktivierungswort. Eine auf den Wake-Satz beschränkte Grammatik wäre sparsamer, verlangt beim Umschalten in den Befehlsmodus aber, das Mikrofon kurz freizugeben – genau in dem Moment, in dem der Nutzer weiterspricht.
  • Wählen über TelecomManager.placeCall statt ACTION_CALL. Seit Android 10 darf ein Hintergrunddienst keine Activity mehr starten; der Telecom-Dienst nimmt den Anruf dagegen zuverlässig entgegen.

Während die App selbst spricht, wird die Erkennung angehalten – sonst hört sie ihre eigene Stimme. Läuft ein Gespräch, pausiert sie ebenfalls und beobachtet den Anruf: kommt binnen zwölf Sekunden kein Gespräch zustande, sagt sie das ausdrücklich, statt stumm zurückzufallen.

Bauen

Voraussetzungen: Android SDK (Plattform 36, Build-Tools 36) und ein JDK 17.

./gradlew assembleDebug

Das deutsche Vosk-Modell (~46 MB) liegt bewusst nicht im Repo – Gradle lädt es beim ersten Build automatisch von alphacephei.com herunter und entpackt es in die Assets. Ein eigenes Modell lässt sich mitgeben:

./gradlew assembleDebug -PvoskModelZip=/pfad/zum/modell.zip

Tests (Namensvergleich, Zahlwörter, Befehlserkennung – ohne Gerät lauffähig):

./gradlew test

Das fertige APK liegt unter app/build/outputs/apk/debug/app-debug.apk und ist rund 62 MB groß – das Sprachmodell macht den Großteil aus.

Einrichtung auf dem Telefon

  1. APK installieren (Installation aus unbekannten Quellen erlauben).
  2. App öffnen, „Berechtigungen erteilen“ antippen: Mikrofon, Kontakte, Telefonieren und Benachrichtigungen.
  3. „Akku-Optimierung ausnehmen“ antippen – sonst schläft der Dienst nach einiger Zeit ein und hört das Aktivierungswort nicht mehr.
  4. „Sprachsteuerung einschalten“. Die App bestätigt gesprochen.

Auf Xiaomi-Geräten reicht Schritt 3 nicht. MIUI beendet Hintergrunddienste unabhängig von der Akku-Optimierung; entscheidend ist dort die Liste „Hintergrund-Autostart“, die ab Werk für fast jede App auf „verboten“ steht. Die Einzelheiten stehen in docs/xiaomi-einstellungen.md – abgelesen von einem echten Gerät, nicht geraten.

Wer im geschlossenen Test mitmacht, findet in docs/pruefliste-test.md eine zum Vorlesen gedachte Liste dessen, worauf es uns ankommt.

Optional, aber für die Zielgruppe sinnvoll:

  • In den Android-Einstellungen unter Apps → Standard-Apps → Digitaler Assistent DialOS Mobil auswählen. Dann startet die Assistenten-Geste direkt das Gespräch.
  • Die Kachel „Sprachsteuerung“ in die Schnelleinstellungen ziehen.

Bekannte Grenzen

  • Autostart ab Android 14: Ein Dienst mit Mikrofon-Zugriff darf nicht aus dem Hintergrund gestartet werden. Nach einem Neustart legt die App deshalb eine antippbare Benachrichtigung an, statt sofort loszuhören.
  • Dauerhaftes Zuhören kostet Akku. Auf einem Testgerät mit ausgenommener Akku-Optimierung ist mit spürbarem Mehrverbrauch zu rechnen; das kleine Vosk-Modell ist bewusst gewählt, um das zu begrenzen.
  • Das kleine deutsche Modell (vosk-model-small-de-0.15) ist auf Kommandos ausgelegt, nicht auf Diktat. Ungewöhnliche Eigennamen erkennt es entsprechend schlechter – dafür gleicht der Namensvergleich einiges aus.
  • Die App ersetzt keine Notruffunktion. Ein Notruf sollte niemals von einer Spracherkennung abhängen.

Danksagung

  • Vosk von Alpha Cephei – Offline-Erkennung und deutsches Sprachmodell (Apache-Lizenz 2.0).
  • Logo und Farben aus dem DialOS-Projekt.

Lizenz

Apache-Lizenz 2.0 – Copyright 2026 Stephan Rösner.

Dieselbe Lizenz wie Vosk, das deutsche Sprachmodell und die verwendeten Android-Bibliotheken; bewusst so gewählt, damit über den ganzen Aufbau hinweg eine einzige Lizenz gilt und die enthaltene Patenterteilung greift. Wer die App weitergibt, muss die NOTICE-Datei mitliefern – dort stehen die Urheber der mitgelieferten Bestandteile.

Änderungsprotokoll

0.6.16 (2026-10-01)

Die App hörte sich selbst zu – und stürzte nach jedem Update ab.

Ein Tag mit zwei Fehlern, die keine Testsuite je gefunden hätte, weil sie erst am Gerät sichtbar werden.

Sie weckte sich mit ihren eigenen Ansagen. Lydia Oberländer hatte es dreimal gemeldet, zuletzt mit dem entscheidenden Wortlaut: „Sie redet, dass das Gerät die App abgeschaltet hat und nun wieder funktioniert, sie fragt dann wem möchten sie anrufen? Keine Aktivierung von mir." Beim ersten Mal hatten wir es auf Falscherkennung geschoben. Das war falsch.

VoiceService.onEngineReady() schaltet das Mikrofon scharf und spricht eine Zeile später los – ohne Pause. Die Pausenlogik saß ausschließlich in DialogController.say(); die beiden Ansagen des Dienstes gingen daran vorbei. Und beide enthielten das Aktivierungswort, die Startansage sogar wörtlich („Sagen Sie: Sprachsteuerung starten"). Vosk hörte den eigenen Lautsprecher und aktivierte.

Beim Messen kam heraus, dass die Mikrofonpause allein nicht gereicht hätte. Die Unterbrechungsansage enthielt gar kein „starten" und weckte die App trotzdem: Das Wortpaar „sprachsteuerung wurde" erreicht gegen „sprachsteuerung starten" eine Ähnlichkeit von 0,783, die Schwelle steht auf 0,70. Die Schwelle anzuheben war kein Ausweg – der einzige verpasste echte Ruf aus der Messung vom 21.09. lag bei 0,78, also gleichauf. Also musste der Satz weichen.

Am Gerät belegt, und zwar beidseitig: Die neue Fassung bleibt beim Wiederanlauf stumm, während die parallel laufende 0.6.14 – genau die Fassung, die Lydia hat – ihre eigene Ansage hörte, als Namen verarbeitete und mit exakt dem Satz antwortete, den Lydia gemeldet hatte.

Die Unterbrechungsansage ist seitdem ersatzlos gestrichen. Sie meldete nicht die Störung, sondern deren Ende; da ist alles in Ordnung und es gibt nichts zu tun. Der Fall, für den sie gebaut war – der Dienst ist weg und kommt nicht wieder – ließ sich damit ohnehin nicht melden, denn eine abgeräumte App kann nicht sprechen. Und ihr Rat („Akku-Optimierung ausnehmen") verwies auf einen Knopf in den Einstellungen, zu dem zu navigieren genau das ist, was dieser Zielgruppe schwerfällt. Die Regel dahinter: Die App spricht nur, wenn sie angesprochen wurde. Damit entfällt auch das ungefragte Lauterstellen – wer nichts sagt, muss nicht hörbar sein.

Kein Absturz mehr nach einem App-Update. Nebenbei beim Prüfen aufgefallen: Der BootReceiver stößt auf MY_PACKAGE_REPLACED den Dienst über startForegroundService() an; der Dienst erkannte den Hintergrundstart, zeigte die Benachrichtigung und rief stopSelf() – aber nie startForeground(). Android hält ihn am Vertrag fest und beendete den Prozess mit einer ForegroundServiceDidNotStartInTimeException. Das traf jede Testperson bei jedem Play-Update, nicht nur den Entwickler.

Eine Rufnummer darf jetzt im selben Satz stehen wie der Befehl: „Nummer wählen null eins sieben acht vier sechs". Das war ein Vorschlag aus dem Test, und die Messung hat ihn bestätigt – sieben Versuche ohne Ankündigung scheiterten, zwei mit Ankündigung kamen fehlerfrei durch:

Variante Vosk hörte Ziffern
ohne Ankündigung null eines sie wenn acht vier sechs 0846
mit Ankündigung nummer wählen null eins sieben acht vier sechs 017846

Die Erklärung ist vermutlich der Vorlauf, der den Erkenner einschwingen lässt; bis dahin zerfiel regelmäßig die erste Ziffer („null" wurde zu „nun"). Die App erkannte den Befehl bisher, warf die Ziffern desselben Satzes weg und fragte neu. Jetzt übernimmt sie sie, sobald mindestens sechs zusammenkommen.

Vier Lücken bei verhörten Zahlwörtern geschlossen. „nun" fehlte – ausgerechnet der häufigste gemessene Verhörer für „null". „vielen" und „neuen" fehlten, obwohl „viel" und „neu" dastanden; aus 004917680 wurde dadurch 0017680, eine andere, völlig gültig klingende Nummer. Solche stillen Auslassungen sind die gefährlichste Fehlerart an dieser Stelle. Außerdem waren zwei verhörte Zahlwörter nebeneinander bisher nicht zu retten – genau der Fall „null null" am Anfang einer Auslandsnummer. Die Sicherheit breitet sich jetzt von echten Zahlwörtern aus, braucht dafür aber weiterhin einen echten Anker.

Das führende Plus wird beim Vorlesen ausgesprochen. Als Sonderzeichen blieb es der Sprachausgabe überlassen, ob sie es nennt – wer den Bildschirm nicht sehen kann, hörte zwischen „+49 176 …" und „49 176 …" womöglich keinen Unterschied. Bei Auslandsnummern ist „null null vier neun" trotzdem der sicherere Weg: Ein verhörtes „plus" fällt ersatzlos weg, „null" dagegen wird aufgefangen.

„Sprachsteuerung stoppen" beendet die App. „stopp" und „stop" standen in der Liste, „stoppen" nicht – ein Unterschied, den kein Nutzer macht, beim direkten Gegenwort zum Aktivierungswort. „stopp" allein bricht weiterhin nur den Schritt ab; diese Trennung ist gewollt.

„Neue Nummer" wirft die bisherige weg – stand in keiner Liste und lief ins Leere.

Die Bestätigung sagt jetzt, dass es drei Wege gibt. Sie lautete „Sagen Sie Ja, Nein, oder Korrigieren für die letzte Ziffer" und las sich, als sei die letzte Ziffer das Einzige, was sich ändern lässt. Dabei bricht „Nein" ab und erlaubt sofort eine neue Nummer; die Ansage verschwieg es nur.

Die Testfassung hat ein eigenes Symbol. Beide Fassungen lassen sich nebeneinander installieren, und das hat zweimal einen Messlauf verfälscht – zuletzt sprach die Play-Fassung ihre Ansage, während die Testfassung zuhörte. Der Name unterscheidet sie seit 0.6.15, aber im Startbildschirm fällt die Farbe weit mehr auf.

81 Tests, Lint sauber.

0.6.15 (2026-09-27)

Die App redet nicht mehr endlos dazwischen, und „abschalten" schaltet sie ab.

Aus einer Rückmeldung vom 27.09.2026: „Die App hat ein Eigenleben. Sie spricht ohne Aufforderung und gibt dann immer zur Antwort, das kann ich in den Kontakten nicht finden. Auch wenn ich ihr sage, sie soll sich abschalten […] versteht sie immer etwas anderes."

Der zitierte Satz war der Schlüssel – er steht im Code genau einmal und fällt nur dann, wenn das Adressbuch gelesen ist. Es war also kein Defekt, sondern eine Lücke im Ablauf: Nach einem erfolglosen Namen landete die App wieder in derselben Frage, und jede Erkennung setzte die Wartezeit neu. Bei einem Fernseher oder einem Gespräch nebenbei lief das unbegrenzt weiter, und die App kommentierte jeden Satz im Raum.

  • Nach drei vergeblichen Versuchen hintereinander hört sie auf und sagt, warum: „Ich verstehe Sie gerade nicht. Vielleicht ist es hier zu laut. Ich höre jetzt auf, damit ich Ihnen nicht dazwischenrede." Ein Erfolg setzt die Zählung zurück, und eine halb diktierte Rufnummer wird auch hier nicht weggeworfen, sondern zur Bestätigung vorgelesen.
  • „Abschalten" fehlte in den Befehlen – das nächstliegende Wort überhaupt. Die App suchte es als Namen und antwortete, sie finde es nicht in den Kontakten. Dazu kamen „ausschalten", „abstellen", „schalte dich ab", „Ruhe" und die Formen mit „App".
  • Der Ausgang wird jetzt so großzügig geprüft wie der Eingang. Bisher erkannte nur das Aktivierungswort Verhörer über ein Ähnlichkeitsmaß, das Beenden verlangte den genauen Wortlaut – die Tür war von außen leichter zu öffnen als von innen. Gemessen: Der belegte Verhörer „sprachstörungen" liegt bei 0,667, das nächstliegende gewöhnliche Wort („sprechstunde") bei 0,533; die Schwelle liegt dazwischen.
  • Höflichkeit entwertet keinen Befehl mehr. „Hilfe bitte", „bitte aufhören" und „abbrechen bitte" fielen durch und wurden als Name gesucht. Ausgerechnet die Sätze, die jemand sagt, der nicht weiterweiß, waren die unwirksamsten.

Kontakte mit Zahlen im Namen werden gefunden – und eine gesagte Rufnummer wird nicht mehr als Name gesucht.

Aus derselben Rückmeldung, einen Tag später: „Ich wollte die MA40 anrufen, dieser Kontakt steht so in meinem Telefon, diese hat die App nicht gefunden, genauso wenig wie die Telefonnummer von dort, die ich ihr angesagt habe." Und der Satz, der die naheliegende Erklärung ausschloss: „Beidemale war es still in meiner Umgebung."

Es war auch keine. Nachgemessen ergibt „ma vierzig" gegen den Kontakt „MA40" 0,412 bei einer Trefferschwelle von 0,62 – das konnte bei keiner Lautstärke funktionieren. Im Adressbuch steht die Ziffer, gesprochen wird das Zahlwort, und dazwischen lag keine Brücke.

  • Zahlwörter werden zu Ziffern, bevor verglichen wird: „ma 40" ergibt 0,800, zusammengezogen „ma40" genau 1,000. Das betrifft weit mehr als diesen Fall – Behördenstellen, Buslinien, Zimmernummern, „Werkstatt 2".
  • Zerlegte Namen werden wieder zusammengesetzt. Das Sprachmodell zerlegt unbekannte Namen in bekannte Wörter; aus „Ludwig" wird „lud wig" (0,857 gegen 1,000 zusammengezogen).
  • Beides kommt zusätzlich zum bisherigen Vergleich, und es gilt das Maximum. Jede Umformung für sich kann nämlich auch schaden: „ma vierzig" zusammengezogen fällt auf 0,222, „Hans Peter" von 1,000 auf 0,900. Ein bisher gefundener Kontakt bleibt damit gefunden.
  • Eine gesprochene Rufnummer wird als solche erkannt. Bisher musste man erst „Nummer wählen" sagen; wer gleich die Ziffern sprach, bekam zu hören, sie seien nicht in den Kontakten. Jetzt sucht die App erst den Kontakt und liest, wenn keiner passt und mindestens sechs Ziffern zusammenkommen, die Nummer zur Bestätigung vor. Die Hilfe nennt diesen Weg jetzt zuerst – eine Möglichkeit, von der niemand weiß, gibt es nicht.
  • Eine verschluckte Fünf. Auf diesem Weg kommt der Text ohne Umlaute an, und GermanNumbers kannte „fünf" und „fuenf", aber nicht „funf". Aus acht gesprochenen Ziffern wurden sieben, ohne jeden Hinweis. Eine Rufnummer, die stillschweigend eine Ziffer verliert, ist schlimmer als gar keine: Sie wird gewählt, nur eben falsch.

Was dabei nicht gelöst ist: Der zweite gemeldete Kontakt, „Heli", bleibt offen. Fast alle plausiblen Verhörer treffen dort schon heute (helli, helly, eli, heil, geli – alle über 0,75), die Ursache ist also eine andere. Ohne den tatsächlichen Wortlaut wäre jede Änderung geraten.

Die App sagt jetzt, wie viele Kontakte sie kennt.

Aus einer Rückmeldung: „sie findet nicht meine Kontakte". Die Meldung grenzte die Ursache schon ein – wäre die Berechtigung nicht erteilt, hätte die App „Ich konnte keine Kontakte lesen" gesagt. Sie las das Adressbuch also, fand nur den gesuchten Namen nicht.

Damit stand die Testperson vor einer Frage, die sie nicht beantworten konnte: Kennt die App mein Adressbuch überhaupt, oder versteht sie bloß den Namen falsch? Ein Blick auf den Bildschirm hätte es auch nicht verraten – die Zahl stand nirgends. Dabei wusste die App sie die ganze Zeit.

  • Beim Einschalten nennt sie die Zahl: „Sprachsteuerung eingeschaltet. Ich kenne 247 Kontakte." Nur beim Einschalten, nicht bei jedem Aktivierungswort – sonst hörte man sie vor jedem Anruf, und aus einer Diagnosehilfe würde eine Belästigung.
  • Bei null Kontakten wird daraus ein Hinweis: wo die Berechtigung steht, und dass Anrufen per „Nummer wählen" trotzdem geht.
  • In „Infos & Einstellungen" steht dieselbe Zahl noch einmal schwarz auf weiß, gleich unter dem Unterbrechungszähler.

Gezählt werden Personen, nicht Rufnummern – wer drei Nummern hat, ist ein Kontakt. Und die Anzeige unterscheidet „null Kontakte" von „noch nicht gelesen": Das eine ist eine Aussage, das andere nur fehlendes Wissen, und eine falsche Null wäre schlimmer als gar keine Zahl.

0.6.14 (2026-09-21)

Drei Funde aus einem Test am Gerät. Der erste ist der schwerwiegendste.

  • Der abgeschaltete Schalter schwieg. Die App erkannte „Sprachsteuerung starten" zweimal einwandfrei – im Protokoll wörtlich nachzulesen – und tat nichts, weil in den Einstellungen „Auf ‚Sprachsteuerung starten' hören" ausgeschaltet war. Keine Ansage, kein Ton. Von außen war das nicht von „hört mich nicht" zu unterscheiden, und wer den Bildschirm nicht sehen kann, sucht den Fehler dann bei der eigenen Aussprache. Genau so ist die Meldung entstanden, das Aktivierungswort funktioniere nicht.

    Jetzt sagt die App: „Ich habe Sie verstanden. Das Starten per Aktivierungswort ist aber ausgeschaltet" – samt Weg zum Schalter. Der Satzanfang ist der Punkt: Die fehlende Information war nicht, wo der Schalter sitzt, sondern dass die App überhaupt zugehört hat. Gesagt wird das einmal je Aus-Phase, nicht bei jedem Versuch; aus dem Schweigen soll keine Nörgelei werden.

Die beiden anderen betreffen Leute mit einem gepflegten Adressbuch.

  • Zwei gleich benannte Nummern waren nicht auseinanderzuhalten. Wer zwei Handys hat, hat im Adressbuch zweimal „Mobil" stehen. Die Rückfrage kam dann zweimal wortgleich – „Soll ich Max Mustermann auf Mobil anrufen?" – und auf „Nein" folgte dieselbe Frage noch einmal. Wer den Bildschirm nicht sehen kann, hatte keinen Anhaltspunkt, welche der beiden gerade gemeint ist. Jetzt kommen bei mehrdeutiger Bezeichnung die Endziffern dazu: „auf Mobil, endet auf 5 6 7 8". Nur dann – bei „Mobil" und „Privat" bleibt es bei der kürzeren Ansage.
  • Das Adressbuch wurde nur einmal gelesen, beim Einschalten. Wer danach einen Kontakt anlegte oder eine Nummer korrigierte, bekam „habe ich in den Kontakten nicht gefunden", ohne jeden Hinweis, dass die App einen veralteten Stand kennt. Sie horcht jetzt auf Änderungen und liest neu – mit drei Sekunden Verzögerung, weil eine Kontosynchronisierung sonst Dutzende Male hintereinander das ganze Adressbuch neu einlesen würde. Am Gerät nachgewiesen: eine Änderung, Dutzende Einzelmeldungen, ein Neuladen.

0.6.13 (2026-09-21)

Das Aktivierungswort ist zum ersten Mal gemessen statt geraten.

Seit 0.6.0 stand in diesem Repo der Satz, die Schwellwerte in CommandParser.isWakePhrase seien geschätzt und nie mit einer echten Stimme geprüft. Das ist jetzt nachgeholt: Testlauf am Motorola edge 50 neo, normale Sprechlautstärke, Gerät auf dem Tisch, dazu eine Viertelstunde Raumgeräusch und ein nebenher laufendes Gespräch als Gegenprobe.

  • Fünf von sechs Rufen wurden erkannt. Der eine verpasste hieß im Protokoll „sprachstörungen starten" – eine Ähnlichkeit von 0,78, knapp unter der geratenen Schwelle von 0,82.
  • Kein einziger Fehlalarm. Was das Modell aus Nebengeräuschen machte („diese gelatine fuhr", „welcher bewegen erwachen er"), kam über 0,26 nicht hinaus.

Zwischen 0,26 und 0,78 liegt viel Luft, und sie wurde bisher verschenkt. Die Schwelle steht jetzt bei 0,70: Sie fängt den Verhörer und hält zum lautesten Raumgeräusch noch fast den dreifachen Abstand. Die gemessenen Sätze – Rufe wie Rauschen – stehen als Regressionsfälle in CommandParserTest; wer die Schwelle künftig anfasst, merkt sofort, wenn er sie verschlechtert.

Dass dieser Test so lange aussagelos blieb, hatte einen Grund, der erst in 0.6.11 ans Licht kam: Die App hat monatelang gar nicht zugehört. Ein Erkennungsproblem konnte man nicht messen, solange das Mikrofon stumm war.

0.6.12 (2026-09-20)

Zwei Fragen aus dem Test, und beide deckten eine Lücke auf.

  • Die Ansagen waren auf einem stumm gestellten Telefon unhörbar. Die Lautstärke wurde nur beim Öffnen der Startseite angehoben – nicht, wenn die App per Aktivierungswort anspringt. Wer das Telefon stumm in der Tasche hatte und „Sprachsteuerung starten" sagte, bekam eine Antwort, die niemand hören konnte: genau der Alltagsfall, für den das Aktivierungswort gebaut ist. Der Dienst sorgt jetzt selbst dafür, bevor er zum ersten Mal spricht. Wer lauter gestellt hat, behält es – angehoben wird nur, was darunter liegt.
  • Der Flugmodus war der App unbekannt. Sie sagte „Ich rufe Max Mustermann an", der Anruf scheiterte stumm, und erst nach zwölf Sekunden meldete der Anrufwächter, es sei nichts zustande gekommen – ohne zu sagen, warum. Jetzt prüft die App vor dem Wählen und sagt es sofort. Ausschalten kann sie den Flugmodus nicht, das ist seit Android 4.2 Systemapps vorbehalten. Was sie kann: hinführen. Eine Benachrichtigung öffnet direkt die Flugmodus-Einstellungen, und die Ansage erklärt den Weg dorthin, statt nur zu melden, dass etwas nicht geht.

0.6.11 (2026-09-20)

Der schwerwiegendste Fehler des Projekts – und der am besten versteckte.

Zwei Testpersonen meldeten, das Aktivierungswort funktioniere nicht; eine schrieb, sie müsse die App „immer händisch aktivieren". Am Gerät zeigte sich warum: Auf dem Testtelefon lag der letzte Mikrofonzugriff fünfzehn Tage zurück, während die App durchgehend „DialOS Mobil hört zu" anzeigte.

Ab Android 12 gilt für Vordergrunddienste, die aus dem Hintergrund gestartet werden, zweierlei – und beides trifft diese App:

  • Der Start wird ganz verweigert (ForegroundServiceStartNotAllowedException). Das passiert nach jedem Neustart des Telefons und nach jedem App-Update.
  • Oder er gelingt, aber ohne Mikrofonzugriff. Dann läuft der Dienst weiter, die Benachrichtigung steht, und Vosk wartet auf Audiodaten, die nie kommen.

Im ersten Fall stand bisher nur eine Zeile im Protokoll, im zweiten gar nichts. Nach außen sah beides gleich aus: eine App, die zu laufen scheint und auf nichts reagiert. Das ist genau das stille Versagen, das bei dieser Zielgruppe am teuersten ist – nur diesmal in der Kernfunktion.

Jetzt bittet die App in beiden Fällen hörbar um einen Fingertipp: eigener Benachrichtigungskanal mit hoher Wichtigkeit, Ton und Vibration statt der bisherigen stummen Zeile im Schacht. Und ein Hintergrundstart ohne Mikrofonrecht wird gar nicht erst versucht, statt taub weiterzulaufen.

Dazu zwei Wege, die ohne Berührung auskommen:

  • „Beim Öffnen der App gleich einschalten" (neue Einstellung). Damit genügt „Hey Google, öffne DialOS Mobil" – die App fragt sofort, wen man anrufen möchte.
  • Die Benachrichtigung nach dem Neustart führt beim Antippen direkt in den Dialog, nicht bloß in die App.

0.6.10 (2026-09-10)

Zwei Befunde aus dem geschlossenen Test, und der zweite ist derselbe Fehler wie in 0.6.3 – nur an einer anderen Stelle.

  • Die Kontaktauswahl verschwieg Treffer. Sie brach stumm nach dem dritten Vorschlag ab. Wer fünf Kontakte namens Hans hatte, kam an zwei davon per Sprache nicht heran und erfuhr nicht einmal, dass es sie gibt. Jetzt sind es bis zu sechs – die Grenze dessen, was sich beim Zuhören noch merken lässt –, und wenn es mehr sind, sagt die App das: „Ich habe acht gefunden und lese die ersten sechs vor." Dazu der Weg heraus: den Vor- und Nachnamen nennen.
  • „Abbrechen" führte in eine Sackgasse. Die App sagte „Abgebrochen." und schwieg. Danach hört sie nur noch auf das Aktivierungswort – aber sie sagte das nicht. Wer daraufhin einen Namen nannte, redete ins Leere; ein Tester hielt die Spracherkennung für kaputt. Sie war es nie. Zweierlei ist jetzt anders: Die Ansage nennt den Weg zurück (und unterscheidet, ob das Aktivierungswort überhaupt eingeschaltet ist). Und „Abbrechen" beendet nur noch den aktuellen Schritt, nicht das ganze Gespräch: Wer mitten in einer Kontaktauswahl abbricht, wird gefragt „Wen möchten Sie anrufen?" statt hinausgeworfen zu werden. Das Gespräch ganz beenden kann man weiterhin mit „Sprachsteuerung beenden".

Beides ist dasselbe Muster wie schon zweimal zuvor: nicht die Technik versagte, sondern die App verschwieg, was sie erwartet.

0.6.9 (2026-09-09)

Der Widget-Knopf aus 0.6.8 funktioniert – aber niemand fand ihn. Das lag nicht am Knopf.

  • Die Einstellungsseite warf einen beim Lesen hinaus. Sie schloss sich nach zehn Sekunden Untätigkeit von selbst; gedacht für jemanden, der sich versehentlich dorthin verirrt und ohne fremde Hilfe nicht zurückfindet. Verlängert wurde die Frist aber nur durch Berührungen. Wer sich die Seite von TalkBack vorlesen lässt, berührt nichts – und wurde mitten im Satz zurückgeworfen. Die Einstellungen waren damit ausgerechnet für die Nutzer unbenutzbar, für die diese App gebaut ist. Jetzt sind es 60 Sekunden, und bei aktivem Screenreader greift die Selbstrückkehr gar nicht.

Aufgefallen, weil Stephan den neuen Widget-Knopf nicht fand – und ich selbst drei Anläufe brauchte, mit Kabel und in Kenntnis der Stelle.

Am Gerät nachgewiesen: Die Seite steht nach 29 Sekunden noch offen. Und der Widget-Knopf aus 0.6.8 tut, was er soll – der Launcher zeigt seinen Bestätigungsdialog mit Vorschau, ein Tippen auf „Hinzufügen" legt den Balken hin, danach verschwindet der Knopf wieder.

0.6.8 (2026-09-09)

  • Die App bietet an, das Widget selbst zu platzieren. Der übliche Weg dorthin ist für die Zielgruppe praktisch unbenutzbar: lange auf eine freie Fläche drücken, in einer Liste blättern, den richtigen Eintrag finden, ziehen und an der richtigen Stelle loslassen. Wer nichts sieht oder die Hände nicht ruhig führt, scheitert daran – und hätte damit ausgerechnet die Bedienhilfe nicht, die für ihn gebaut wurde. Unter „Infos & Einstellungen“ steht jetzt ein Knopf, der den Launcher darum bittet (requestPinAppWidget); der zeigt dann nur noch einen Bestätigungsdialog. Der Knopf erscheint nur, wenn der Balken noch nicht liegt und der Launcher die Anfrage unterstützt – sonst wäre er Ballast oder eine Enttäuschung. Kann der Launcher es doch nicht, erklärt ein Hinweis den Weg von Hand.

0.6.7 (2026-09-09)

Die erste Fassung, die auf einem echten Gerät geprüft wurde statt nur gebaut. Beides kam dabei heraus, weil das Handy angeschlossen war – am Schreibtisch wäre es nicht aufgefallen.

  • Der Widget-Text war falsch. Im eingeschalteten Zustand stand dort „Jetzt sprechen" – man kann aber nicht einfach lossprechen, sondern muss erst das Aktivierungswort sagen oder tippen. Die Zeile darunter widersprach ihr sogar. Jetzt steht dort eine Handlungsaufforderung: „Antippen zum Einschalten" bzw. „Antippen und sprechen". Für blinde Nutzer liest TalkBack ohnehin eine eigene, ausführlichere Fassung vor; der sichtbare Text ist für Menschen mit Sehrest. Beide sagen jetzt dasselbe.
  • Der Unterbrechungszähler zählte App-Updates mit. Ein install -r löste eine „Unterbrechung" aus, weil der Dienst dabei tatsächlich beendet und neu gestartet wird. Technisch richtig, praktisch wertlos: Der Zähler soll die Frage beantworten, ob das Gerät die App abräumt. Neustarts nach Update oder Systemstart zählen deshalb nicht mehr mit.

Am Gerät nachgewiesen (Motorola edge 50 neo, Android 16): Das Widget nimmt die volle Bildschirmbreite ein, wechselt Farbe und Text zuverlässig, ein Tippen startet den Dialog (nicht nur die App), und TalkBack liest die richtige Beschreibung vor. Die Unterbrechungserkennung wurde mit adb shell am force-stop ausgelöst und hat den Fall korrekt als AFTER_INTERRUPTION erkannt.

0.6.6 (2026-09-09)

  • Die Startseite glaubt nicht mehr ihrem Gedächtnis. Räumt Android nur den Dienst ab und lässt den Prozess stehen – das tun vor allem Xiaomi-Geräte –, läuft onDestroy nicht zuverlässig durch, und der gemerkte Zustand bleibt auf „läuft" hängen. Auf dem großen Knopf stand dann weiter „Sprachsteuerung ausschalten", obwohl längst nichts mehr lief: Ein Druck darauf tat also das Gegenteil von dem, was daraufstand. Beim Öffnen der App wird der Zustand jetzt beim System nachgefragt statt aus dem Speicher gelesen, und ein Hinweis sagt, dass das Telefon die Sprachsteuerung beendet hat. Gemeldet von einer Testperson mit einem Xiaomi Redmi 13C, bei der die Akku-Optimierung bereits ausgenommen war.

0.6.5 (2026-09-07)

  • Die App sagt jetzt, wenn Android sie abgeräumt hat. Aus dem Test kam die Meldung, die App beende sich immer wieder selbst. Ob das stimmt, war nicht zu klären: Ein vom System beendeter Vordergrunddienst ist kein Absturz und taucht deshalb in keiner Statistik auf – auch nicht in Android Vitals. Und die App selbst verstummte einfach. Wer nicht auf den Bildschirm sehen kann, merkt das erst, wenn er telefonieren will und nichts passiert. Jetzt erkennt sie den Fall (InterruptionDetector) und sagt beim nächsten Start an, dass sie unterbrochen war – samt Hinweis auf die Akku-Optimierung. Unterschieden wird über die Betriebszeit des Telefons: Läuft sie rückwärts, war ein Neustart dazwischen, und das ist keine Unterbrechung. In „Infos & Einstellungen" steht außerdem, wie oft es passiert ist und wann zuletzt. Damit lässt sich die Frage ohne Kabel, ohne Protokoll und ohne Play Console beantworten.
  • Widget für den Startbildschirm, über die volle Breite. Ein App-Symbol zwischen zwanzig anderen ist für die Zielgruppe kein brauchbares Ziel; ein Balken über den ganzen Bildschirm schon. Er zeigt zugleich, ob die Sprachsteuerung läuft – das war bisher nur in der Benachrichtigungsleiste zu sehen. Ein Tippen schaltet ein und fragt sofort „Wen möchten Sie anrufen?", statt nur die App zu öffnen. Zustandswechsel: Farbe und Text, weil Farbe allein nicht reicht.

0.6.4 (2026-09-06)

Das Diktieren von Rufnummern war unbrauchbar, und das lag nicht an der Erkennung. Ein Testbericht hat vier Dinge auf einmal aufgedeckt.

  • Die App machte sich beim Diktieren selbst taub. Nach jedem erkannten Ziffernblock las sie die gesamte bisherige Nummer vor – und während sie spricht, ist das Mikrofon abgeschaltet. Wer flüssig weiterdiktierte, sprach genau in dieses Loch hinein, und diese Ziffern waren weg. Je länger die Nummer, desto länger die Ansage, desto größer das Loch. Genau das ist im Test zweimal passiert, je eine Ziffer. Die App bestätigt jetzt nur noch die neu hinzugekommenen Ziffern.
  • Eine halb diktierte Nummer geht nicht mehr durch Zeitablauf verloren. Die Wartezeit lag pauschal bei 15 Sekunden – auch beim Diktieren, wo man eine Nummer erst nachschlagen oder ablesen muss. Lief sie ab, rief die App goIdle() und verwarf damit alle Ziffern kommentarlos. Jetzt sind es beim Diktieren 45 Sekunden, und wenn dann noch Ziffern dastehen, fragt die App nach, statt sie wegzuwerfen.
  • Nach dem Diktieren steht jetzt da, was zu tun ist. Bisher las die App die Ziffern vor und schwieg. Der Hinweis auf „fertig“ kam einmal ganz am Anfang – und war, wie der Bericht wörtlich sagte, bis nach dem Diktieren längst vergessen. Die Anleitung steht deshalb nach dem ersten Ziffernblock noch einmal, danach nicht mehr, damit sie nicht im Weg ist.
  • Einzelne Ziffern lassen sich zurücknehmen. „Letzte Ziffer löschen“, „eine zurück“ oder „rückgängig“ nimmt genau eine Stelle weg. Bisher gab es nur „löschen“ – und damit war eine elfstellige Nummer wegen einer einzigen verschluckten Ziffer komplett neu zu sprechen.

Der gesprochene Hilfetext und die Anleitung unter „Infos & Einstellungen“ kennen die neuen Befehle ebenfalls.

0.6.3 (2026-09-05)

Die erste Fassung, die auf Rückmeldungen aus dem geschlossenen Test beruht. Zwei Tester meldeten am selben Tag voneinander unabhängig Dinge, die im Code eindeutig nachweisbar waren.

  • „Ja bitte" und „nein danke" werden verstanden. Die Befehlswörter wurden gegen den ganzen Satz verglichen, nicht Wort für Wort – deshalb fiel die häufigste Antwortform überhaupt durch, obwohl „ja" und „bitte" beide einzeln in der Liste standen. Das traf jeden Nutzer, nicht nur den, der es gemeldet hat.
  • Gleich klingende Namen verdrängen den gemeinten nicht mehr. „Michelle anrufen" schlug hartnäckig Michaels vor. Michelle, Michel und Michael haben denselben Kölner Klangcode (645) und bekamen deshalb alle denselben Punktwert; bei Gleichstand entschied die alphabetische Reihenfolge, und die drei Vorschlagsplätze waren mit Michaels belegt. Ein reiner Klangtreffer wird jetzt niedriger bewertet als ein echter (NameMatcher.PHONETIC_MAX). Meier/Maier/Mayer/Meyer findet die App weiterhin.
  • Nummerntypen im Befehl: „Michaela privat anrufen" wählt jetzt die private Nummer, und auf die Rückfrage genügt „privat", „mobil" oder „Arbeit". Bisher wanderte „privat" in den Namen und störte die Suche, und als Antwort war es unverständlich – wer zwei Nummern gespeichert hatte, kam an die zweite nur über mehrfaches „Nein".
  • Sackgasse nach „Das habe ich nicht verstanden" beseitigt. Die App sollte danach die Frage wiederholen, sagte aber erneut den Hinweis: Die Hilfsvariable für die letzte Frage wurde vom Hinweis selbst überschrieben.
  • Die Ansage nach der Wartezeit sagt die Wahrheit. Bisher hieß es „Ich beende die Sprachsteuerung", obwohl die App nur in den Lauschmodus zurückging und weiter auf das Aktivierungswort hörte. Wer nicht auf den Bildschirm sehen kann, schaltet sie daraufhin unnötig neu ein.
  • Stimme und Sprechtempo sind einstellbar (Infos & Einstellungen). Vier Tempostufen von langsam bis sehr schnell, dazu die auf dem Gerät vorhandenen deutschen Stimmen. Beides über Knöpfe zum Weiterschalten statt über Schieberegler, und nach jedem Tippen kommt eine Hörprobe – anders lässt sich eine Stimme ohne Sicht nicht beurteilen.

Nicht behoben: Schweizerdeutsch versteht die App nicht. Das Vosk-Modell ist auf Hochdeutsch trainiert; ein Schweizer Modell dieser Größe gibt es nicht. Das ist eine Grenze, keine Fehlerbehebung in Sicht.

0.6.2 (2026-08-20)

  • Telefonie ist jetzt Pflicht (uses-feature … required="true"). Google Play bietet die App damit nur noch Geräten mit Telefonie an. Vorher hätte sie sich auf einem WLAN-Tablet installieren lassen, zugehört, den Namen erkannt – und beim Wählen stumm versagt. Genau das Fehlerbild, das für einen blinden Nutzer am schlimmsten ist. Nebeneffekt: Für den Store braucht es keine Tablet-Screenshots.
  • Interner Testrelease in der Play Console veröffentlicht (versionCode 8, 49,9 MB Download).
  • Testersuche auf dialos.org, neuer Ordner website/: Skripte, die die beiden Beiträge deutsch und englisch samt Anmeldeformular über die WordPress-Schnittstelle anlegen, dazu ein kleines Plugin für die Kommentarbereiche. Alles wiederholbar ausführbar, damit Textänderungen im Repo passieren und nicht im WordPress-Editor.

0.6.1 (2026-08-19)

Der erste vollständige Anruf per Sprache hat funktioniert – von „Sprachsteuerung starten" bis zum aufgebauten Gespräch. Zwei Fehler standen dem vorher im Weg:

  • Rufnummern werden vor dem Wählen aufbereitet. Im Adressbuch stehen sie oft als „+49 176 1234-5678"; die Leerzeichen machen die tel:-Adresse ungültig, und der Telefonie-Dienst verwirft sie stillschweigend, ohne eine Ausnahme zu werfen. Genau deshalb war im Protokoll nichts zu sehen: kein Fehler, kein Anruf.
  • Der Anruf-Wächter räumte auf, bevor der Anruf entstand. Er prüfte zwei Sekunden nach dem Wählen, ob der Audio-Modus normal ist, und schloss daraus „Gespräch beendet". Ein Anruf braucht aber mehrere Sekunden bis zum Klingeln. Jetzt gibt es 12 Sekunden Anlaufzeit – und kommt danach nichts zustande, sagt die App das ausdrücklich, statt stumm in den Wartezustand zurückzufallen.

Die Rückfragen klingen jetzt wie Fragen. Stephan wartete im Test 7 bzw. 10 Sekunden, weil „Carola Stern, Mobil, anrufen?" ihn nicht zu einer Antwort veranlasste – beides steht so im Protokoll. Android-TTS erzeugt keine verlässlich steigende Satzmelodie, deshalb steht die Aufforderung jetzt im Satz: „Soll ich … anrufen? Sagen Sie Ja oder Nein." Die Kartenauswahl heißt „Für 1&1 sagen Sie 1" statt „1: 1&1" – letzteres las die Stimme als Aufzählung vor, nicht als Angebot.

Welche der beiden Korrekturen den Anruf tatsächlich freigemacht hat, ist offen: Beide gingen zusammen ein, und der erfolgreiche Test lief ohne angestecktes Kabel. Die Nummer ist der wahrscheinlichere Kandidat, weil der Wächter den Anruf nicht verhindert, sondern nur den Dialog zurückgesetzt hätte.

  • Nebenbei: Rufnummern erscheinen im Protokoll nur noch angedeutet (017…78), nicht mehr im Klartext.

0.6.0 (2026-08-19)

  • Kurznachrichten wieder entfernt. Nicht aus technischen Gründen – der Weg funktionierte –, sondern für die Veröffentlichung: Google lässt die Berechtigung SEND_SMS nur für eine abschließende Liste zugelassener Anwendungsfälle zu, auf der ein Sprachwähler nicht steht. Die App hätte die Prüfung mit hoher Wahrscheinlichkeit nicht bestanden. Telefonieren bleibt die Kernfunktion, und dafür stehen die Chancen gut.
  • Die App fordert damit keine SMS-Berechtigung mehr an.
  • Vorbereitung für den Play Store: Release-Signierung, App-Bundle, Datenschutzerklärung, Store-Texte, Data-Safety-Ausfüllhilfe und eine Schritt-für-Schritt-Anleitung.
  • Nachgeprüft und im Paket belegt: Die App hat keine Internetberechtigung – sie kann technisch nichts versenden.

0.5.0 (2026-08-19)

  • Kartenwahl per Sprache bei zwei SIM/eSIM. Nach der Bestätigung fragt die App „Über welche Karte? Eins: 1&1. Zwei: YELLLOW.“ – die Antwort geht per Zahl oder Anbietername. Angesagt wird der Name aus den Android-Einstellungen, nicht der Netzbetreiber – im Roaming hieße die Karte sonst „3 AT – 1&1“. Gilt für Anrufe wie für Nachrichten. Bei nur einer Karte wird nicht gefragt.
  • Ohne diese Wahl nimmt Android stillschweigend die voreingestellte Karte – im Zweifel die falsche, im Ausland die teure.
  • „Infos & Einstellungen“ zeigt jetzt die Version und einen Link zum Quelltext auf GitHub.
  • Das Logo auf der Startseite ist doppelt so groß; der Startbildschirm lässt sich dafür scrollen, damit auf kleinen Geräten nichts abschneidet.

0.4.0 (2026-08-19)

  • Startbildschirm auf das Wesentliche reduziert: Lautstärke, Kontrast, Zustand und ein einziger, doppelt so hoher Knopf. Alles zur Einrichtung liegt hinter „Infos & Einstellungen“ unten in der Mitte.
  • Der Knopf startet jetzt sofort das Gespräch. Vorher musste man nach dem Einschalten noch „Sprachsteuerung starten“ sagen – doppelt, wenn man das Telefon ohnehin in der Hand hält. Das Aktivierungswort bleibt für später wichtig (Telefon in der Tasche, Bildschirm aus).
  • „Infos & Einstellungen“ hat einen großen Zurück-Knopf oben und unten und springt nach 10 Sekunden ohne Berührung von selbst zur Startseite – wer versehentlich dort landet, findet sonst womöglich nicht zurück.
  • Behoben: fitsSystemWindows überschreibt das Padding der View, auf der es steht – die Schaltflächen klebten dadurch am Bildschirmrand.

0.3.0 (2026-08-19)

  • Kontrast-Umschalter oben rechts: schwarzer Grund, gelbe Schaltflächen. Gelb auf Schwarz bleibt bei Blendung und Kontrastverlust lesbar, wo Blau auf Weiß verschwimmt.
  • Lautstärke-Umschalter oben links, 50 % oder 100 %. Die App setzt bei jedem Start 50 % – das Testgerät stand auf 27 %, und wer nichts sieht, bemerkt eine zu leise Ansage erst, wenn die App scheinbar schweigt. Die Sprachausgabe liegt dafür jetzt auf dem Medien-Kanal, den auch die Lautstärketasten des Telefons regeln.
  • Die Schaltfläche „Jetzt sprechen“ ist entfallen: sie war redundant. Ist die Sprachsteuerung aus, hilft sie nicht; ist sie an, genügt das Aktivierungswort. Für den manuellen Start gibt es weiterhin die Schnelleinstellungs-Kachel, den Startsymbol-Kurzbefehl und den Assistenten-Aufruf.
  • Die Abschnitte „Berechtigungen“ und „Dauerbetrieb“ sind zurückhaltender gestaltet – sie werden einmal gebraucht, nicht täglich.

0.2.0 (2026-08-19)

  • Kurznachrichten per Sprache: „Schreibe Max Mustermann“, Text diktieren, mit „fertig“ abschließen. Die App liest Empfänger und Text noch einmal vor und sendet erst nach „Ja“.
  • Bestätigung vor dem Absenden ist bewusst nicht abschaltbar – anders als beim Anruf ist eine SMS unwiderruflich und kostenpflichtig.
  • Für Nachrichten werden Mobilnummern bevorzugt; bleibt nur eine Festnetznummer übrig, weist die App gesprochen darauf hin.
  • Neue Sprachbefehle: „Löschen“ / „noch mal von vorn“ verwirft den diktierten Text. Beim Diktieren gilt eine längere Denkpause (30 statt 15 Sekunden).
  • Die SIM-Karte kommt aus der Android-Standardeinstellung für SMS – auf Geräten mit zwei Karten wird also die genommen, die dort ohnehin eingestellt ist.
  • Erster Lauf auf echter Hardware bestanden (Motorola edge 50 neo, Android 16).
  • Material-You-Farben entfernt und alle Farbrollen fest gesetzt: das DialOS-Blau war durch vom Hintergrundbild abgeleitete Töne ersetzt worden, der Kontrast hing damit vom Zufall ab.

0.1.0 (2026-08-19)

  • Erste Fassung.
  • Aktivierungswort „Sprachsteuerung starten“ über dauerhaft laufende Offline-Erkennung (Vosk, deutsches Modell).
  • Anrufen per Kontaktname mit Kölner Phonetik, Levenshtein-Ähnlichkeit und wortweisem Vergleich; Rückfrage bei mehrdeutigen Treffern.
  • Rufnummern per Sprache diktieren, inklusive deutscher Zahlwörter, Ländervorwahl mit „plus“ und „doppel“ für Wiederholungen.
  • Bestätigung vor dem Wählen, abschaltbar.
  • Start zusätzlich über Schaltfläche, Schnelleinstellungs-Kachel, Startsymbol-Kurzbefehl und Assistenten-Aufruf.
  • Autostart nach Neustart mit Ausweich-Benachrichtigung ab Android 14.
  • Barrierefreie Oberfläche mit sehr großen Schaltflächen und Live-Region für TalkBack.
  • Logo und Farbschema aus DialOS übernommen.
  • Modell wird beim Build automatisch geladen und liegt nicht im Repo.

About

Handy-Ableger von DialOS: eine Android-App, mit der man allein durch Sprechen telefonieren kann – für blinde und motorisch stark eingeschränkte Menschen, die ein Telefon nicht bedienen können, aber anrufen und angerufen werden möchten. Die Spracherkennung läuft vollständig offline auf dem Gerät (Vosk), es geht kein Ton ins Netz.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages