New
Apps 1,895Makers 1,890This week 1,690
Promote your app−30%
DialOS Mobil screenshot 1
0views in
the last 30 days

DialOS Mobil

Android app for making phone calls purely by speaking

Built with Claude Code

by stephan-lefty · Unclaimed · from DEGermany · added Oct 29, 2026
no ratings0 comments

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.

Auf dem Handy installieren

Wer nicht selbst bauen will, nimmt die fertige Datei aus den Veröffentlichungen. Dieser Link zeigt immer auf die neueste Fassung:

https://github.com/Stephan-Lefty/DialOS-Mobil/releases/latest/download/DialOS-Mobil.apk

Auf dem Handy abtippen will das niemand – dafür ist der Code da. Abfotografieren, und der Browser lädt die Datei:

Strichcode, der zur neuesten DialOS-Mobil-Datei führt

Beim ersten Mal fragt Android, ob dieser Browser Programme installieren darf. Das ist die normale Rückfrage bei allem, was nicht aus dem Play Store kommt. Rechne mit 54 MB – das Offline-Sprachmodell macht den Großteil aus, über Mobilfunk lohnt sich das Warten auf WLAN.

Zwei Dinge, die bei seitlich installierten Apps gern schiefgehen und hier nicht schiefgehen:

  • Ein späteres Update aus dem Play Store braucht keine Deinstallation. Die Datei ist von Google unterschrieben, nicht mit unserem Upload-Schlüssel – also mit derselben Signatur wie die Store-Fassung (nachgeprüft mit apksigner verify --print-certs, nicht angenommen). Bei einer selbst unterschriebenen Datei wäre es anders: Android verweigert ein Update mit fremder Signatur, und beim nötigen Deinstallieren gehen die Einstellungen verloren.
  • Die Bedienungshilfen bleiben nutzbar. Android sperrt seitlich installierten Apps die eingeschränkten Einstellungen, zu denen die Bedienungshilfen-Dienste gehören. DialOS Mobil braucht keinen davon – es hört selbst zu und wählt selbst –, also fehlt hinterher nichts.

Eine Prüfsumme kann dieser Weg nicht mitgeben. Der Link zeigt immer auf die neueste Fassung, eine hier eingetragene Prüfsumme wäre beim nächsten Release falsch – und eine falsche Prüfsumme ist schlimmer als keine. Wer vergleichen will, findet auf dialos.org/dialos-mobil den versionsfesten Link mit der zugehörigen SHA-256-Summe, dazu eine Installationsanleitung, die sich ausdrücklich an eine helfende Person richtet.

Weiter mit der Einrichtung.

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.

  • Betont laut gesprochen bricht die Erkennung zusammen. Gemessen am 07.10.2026, dieselbe neunstellige Nummer siebenmal gesprochen: normal gesprochen 3 von 3 richtig, betont laut 1 von 4. Die Entfernung ist dagegen unkritisch – auch aus einem Meter wurde fehlerfrei erkannt.

    Das ist deshalb bemerkenswert, weil es dem Naheliegenden widerspricht: Wer nicht verstanden wird, spricht lauter und hält das Gerät näher ans Gesicht – und macht damit genau das Falsche. Im lauten Fall zerfällt „eins sieben“ zu „alles selber“ oder „einsehen sehen“; das sind keine Verhörer mehr, die sich nachtragen ließen. Die Bedienhinweise in der App sagen es inzwischen ausdrücklich, Messwerte in NummerMitEinleitungTest.

  • 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.18 (2026-10-24)

Richtigstellung. Alles in diesem Abschnitt stand bis zum 24.10.2026 unter „0.6.17" – fälschlich. Die Arbeit entstand am 07.10., zwei Tage nach der Auslieferung von 0.6.17, und die Versionsnummer wurde dabei nicht erhöht. Es gab deshalb zwei verschiedene Programme mit demselben Namen: das ausgelieferte 0.6.17 (nur kleiner, siehe unten) und das im Repo. Aufgefallen beim Blick in die Play Console. Wer die Nummer nicht mit erhöht, macht aus einer Verbesserung eine Luftbuchung – Android erkennt Fassungen am versionCode, und der stand unverändert auf 23.

Lauter sprechen macht es schlechter – gemessen, und es ist der häufigste Bedienfehler.

Eine Testperson schrieb: „Sie versteht mich nicht, obwohl ich das Gerät in der Hand halte und laut und deutlich spreche.“ Das klang nach einer Entschuldigung dafür, dass es trotzdem nicht ging. Es war die Fehlerursache.

Dieselbe neunstellige Nummer siebenmal gesprochen, Motorola edge 50 neo:

Sprechweise richtig erkannt
normal, 30 cm ✓
normal, 1 Meter ✓
betont laut, 5 cm ✓
betont laut, 30 cm (4×) 1 von 4

Die Entfernung spielt praktisch keine Rolle – aus einem Meter lief es fehlerfrei. Die Lautstärke dagegen schon: Von vier betont laut gesprochenen Versuchen war einer richtig. Die App sagt das jetzt in der gesprochenen Hilfe und im Hilfetext ausdrücklich, weil niemand von selbst darauf kommt, leiser zu sprechen, wenn er nicht verstanden wird.

Warum sich das nicht in der Verhörer-Tabelle lösen lässt: Im lauten Fall zerfiel „eins sieben“ zu „alles selber“ und „einsehen sehen“. Bis heute lagen die Verhörer immer nah am Zahlwort („nun“ für „null“, „sieden“ für „sieben“) und waren nachtragbar. „sehen“ oder „alles“ als Ziffer zu werten wäre dagegen nicht zu verantworten – und der Stamm von „sieben“ ist „sie“, ein Pronomen. Die Grenze dieser Methode ist damit erreicht; was bleibt, sind Bedienhinweise und eine Pegelrückmeldung.

Drei Fehler aus demselben Messlauf, die sich lösen ließen:

„sieden“ fehlte als Verhörer für „sieben“. Die Sieben fiel deshalb ersatzlos weg, und aus neun Ziffern wurden acht – ohne jeden Hinweis darauf. Das ist die gefährlichste Fehlerart hier, weil eine gültig klingende Nummer übrig bleibt, die der Nutzer bestätigt. Ebenso ergänzt: „viele“ und „neue“. Zum dritten Mal derselbe Fehlertyp – eine Beugungsform fehlt, während die Nachbarformen längst in der Tabelle stehen.

„nein“ wurde zweimal als „ein“ verstanden, und die App wiederholte daraufhin wortgleich dieselbe Frage. Am Bildschirm ist das ein Schulterzucken; wer nichts sieht, erlebt eine App, die auf gar nichts mehr reagiert. Im Bestätigungsschritt gilt „ein“ jetzt als Nein – und nur dort, denn beim Diktieren muss es die Eins bleiben.

Außerdem belegt: Die Auslandsvorwahl als „null null“ kommt jetzt vollständig durch (0 0 4 9 1 7 6 8 0). Vor 0.6.16 verschluckte die App die beiden Nullen und machte daraus eine andere, gültig klingende Nummer.

0.6.17 (2026-10-05)

Die APK ist um gut 3 MB kleiner: 54,1 statt 57,4 MB.

Keine Änderung an der App selbst, nur an ihrer Größe. Das Paket brachte die native Vosk- und JNA-Bibliothek bisher auch für x86_64 mit – eine Architektur, die kein Telefon hat, sondern nur der Android-Emulator.

Zu den Zahlen, weil die beiden auseinandergehen: Die beiden weggelassenen Bibliotheken wiegen unkomprimiert 9,8 MB, im Paket liegen sie aber komprimiert und kosten dort 3,3 MB. Der erste Entwurf dieses Eintrags nannte die 9,8 MB als Ersparnis – das war falsch, nachgemessen wurde dann beides.

Der Anlass ist der geplante Direkt-Download auf dialos.org: Über den Play Store fiel das Gewicht nie auf, weil Google aus dem AAB passgenaue Pakete schneidet. Wer die APK dagegen von der Webseite lädt, zieht die ganze Datei. Für eine App, die blinde Menschen über eine möglicherweise schmale Leitung installieren, zählt das.

Die Einschränkung steht in defaultConfig, die Ergänzung für den Emulator im debug-Block – nicht umgekehrt. Gradle vereinigt die abiFilters eines Build-Typs mit denen von defaultConfig, statt sie zu ersetzen; in der anderen Reihenfolge wäre die Einschränkung wirkungslos geblieben.

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. Eine Testperson hatte es dreimal gemel

Description taken from the repository README.

Ratings

–
0 ratings
5 0
4 0
3 0
2 0
1 0

Rate this app

Sign in to rate

Comments 0

Sign in to comment

No comments yet.

Related apps

#voice · #phone · #accessibility