Vergleich der Spracherkennung in Android: von Intent oder on-thread?

Einführung

Android bietet zwei Möglichkeiten für mich, Spracherkennung zu verwenden.

Der erste Weg ist durch eine Intent , wie in dieser Frage: Intent Beispiel . Eine neue Activity wird auf die Oberseite des Stapels gedrückt, der dem Benutzer zuhört, etwas Rede hört, versucht, ihn zu transkribieren (normalerweise über die Wolke) und gibt dann das Ergebnis über einen onActivityResult Aufruf an meine App zurück.

Die zweite ist, indem sie einen SpeechRecognizer , wie der Code hier: SpeechRecognizer Beispiel . Hier sieht es so aus, als ob die Rede aufgezeichnet und auf einen anderen Thread transkribiert wird, dann Rückrufe bringen mir die Ergebnisse. Und dies geschieht, ohne meine Activity .

Ich möchte die Vor- und Nachteile dieser beiden Möglichkeiten der Spracherkennung verstehen.

Was ich so weit habe

Mit der Intent :

  • Ist einfach zu kodieren
  • Vermeidet das Rad neu zu erfinden
  • Gibt eine konsistente Benutzererfahrung der Spracherkennung über das Gerät hinweg

aber

  • Könnte für die Schaffung einer neuen Aktivität mit seinem eigenen Fenster langsam sein

Mit dem SpeechRecognizer :

  • Lässt mich die Kontrolle über die Benutzeroberfläche in meiner App behalten
  • Gibt mir zusätzliche Möglichkeiten der Dinge zu reagieren ( Dokumentation )

aber

  • Beschränkt sich auf den Hauptfaden
  • Mehr Kontrolle erfordert mehr Fehlerprüfung.

  • Entwicklung der Anwendung ähnlich wie "Google jetzt" - ist es möglich, Spracherkennung ohne Tasteneingabe zu verwenden?
  • Wie implementiere ich den Button in ViewPager?
  • SpeechRecognizer mit der Google-Suchversion 3.6.14.1337016 kann keine andere Sprachsprache außer dem Standard erkennen
  • RecognitionListener in JellyBean Gefriert, wenn nicht sofort gesprochen
  • Wie kann ich die Spracherkennung ohne den lästigen Dialog in Android-Handys verwenden?
  • Rede auf Text auf Android
  • Android: Ist es möglich, das Spracherkennungs-Popup-Fenster neu zu positionieren?
  • Android Spracherkennung Continuous Service
  • 3 Solutions collect form web for “Vergleich der Spracherkennung in Android: von Intent oder on-thread?”

    Darüber hinaus würde ich zumindest diesen Punkt hinzufügen:

    SpeechRecognizer ist besser für freihändige Benutzeroberflächen, da Ihre App tatsächlich auf Fehlerbedingungen wie "Keine Spiele" antwortet und sich vielleicht neu starten kann. Wenn Sie die Intent , ertönt die App und zeigt einen Dialog, den der Benutzer drücken muss, um fortzufahren.

    Meine Zusammenfassung ist wie folgt:

    SpeechRecognizer

    • Zeigen Sie verschiedene UI oder keine UI überhaupt. Möchtest du wirklich, dass deine App die UI hört? Möchten Sie wirklich, dass Ihre Benutzeroberfläche einen Dialog zeigt, wenn es einen Fehler gibt und warten Sie, bis der Benutzer anklickt?

    • App kann etwas anderes tun, während Spracherkennung geschieht

    • Erkennt die Sprache beim Laufen im Hintergrund oder von einem Dienst

    • Kann Fehler besser behandeln

    • Kann auf niedrige Sprachunterlagen wie das rohe Audio oder den RMS zugreifen. Analysieren Sie das Audio oder verwenden Sie die Lautstärke, um eine Art Blinklicht zu machen, um anzuzeigen, dass die App hört

    Absicht

    • Konsequente und einfach zu bedienende Benutzeroberfläche für Benutzer
    • Einfach zu programmieren

    Der Hauptunterschied ist UI. SpeechRecognizer hat keine so Sie sind verantwortlich für die Erstellung eines.
    Ich benutze, um einen Prototypen zu schreiben, wo ich Receiver zum Hören von Headset-Taste habe, dann Aktivierung der Spracherkennung, um auf einige Befehle zu hören. Bildschirm wurde nicht aktiviert, also musste ich SpeechRecognizer (meine Benutzeroberfläche war einige vorbespielte Sounds und Text To Speech).

    Zweiter Unterschied ist, dass SpeechRecognizer Fähigkeit zum ständigen Hören hat. Absicht Version wird immer Ende der Prüfung nach einiger Zeit. Zum Beispiel wird SpeechRecognizer von der Spracherkennung "Tastatur" verwendet, so dass Sie eine SMS diktieren können.
    In diesem Fall erhalten Sie nur Teilergebnisse (im Normalmodus SpeechRecognizer gibt nur endgültige Ergebnisse).

    Eine Sache, die die anderen Antworten nicht erwähnt haben: Wenn mehrere Spracherkenner auf dem Gerät installiert sind, dann ist die Benutzerumschaltung zwischen ihnen unterschiedlich, je nachdem, ob "Intent" oder der SpeechRecognizer verwendet wird.

    • Im Falle von "Intent" wird der Standard-Aktivitäts-Auswahl-Dialog aufgetaucht. Der Benutzer kann den zu verwendenden Erkenner auswählen und wahlweise global als Standarderkenner einstellen, um den Dialog in Zukunft zu vermeiden.
    • Im Falle von SpeechRecognizer der Anwender den Default-Erkenner in den globalen Einstellungen einstellen und konfigurieren ( Language and input -> Voice recognizer auf ICS).

    Je nachdem, welche Schnittstelle verwendet wird, sollte die Dokumentation über die Einstellung des Default-Erkenners und das Umschalten zwischen den Erkennern unterschiedlich sein. (In den meisten Fällen, obwohl es nur eine Erkennung, Google Voice Search, so dass dies nicht ein großes Problem in der Praxis sein.)

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.