Ich entwickle hier eine sehr einfache App. Es ist für meine Zerebralparese Tochter. Es ist nur eine große JA und NEIN-Tasten, so kann sie sie drücken, wenn angefordert.
Nun ... Ich benutze SVOX Classic TTS Engine.
Alles lief reibungslos, bis mein Tablet auf ICS aktualisiert wurde. Jetzt, jedes Mal, wenn ich die App starte, öffnet es den Markt und bittet mich, TTS zu installieren. Ich drücke "zurück" und dann spricht meine App. Das ist sehr nervig.
Hier ist, was Google API sagt:
* Eine erfolgreiche Prüfung wird durch einen CHECK_VOICE_DATA_PASS-Ergebniscode markiert, der angibt, dass dieses Gerät nach der Erstellung unseres TextToSpeech-Objekts sprechen kann. Wenn nicht, müssen wir dem Benutzer mitteilen, dass er die Daten installieren muss, die für das Gerät erforderlich sind, um ein mehrsprachiges sprechendes Gerät zu werden! Das Herunterladen und Installieren der Daten erfolgt durch Abfeuern der ACTION_INSTALL_TTS_DATA-Absicht, die den Benutzer zu Android Market führt und ihn den Download starten lässt. Die Installation der Daten erfolgt automatisch, sobald der Download abgeschlossen ist. Hier ist ein Beispiel dafür, wie Ihre Implementierung von onActivityResult () aussehen würde: *
Hier ist mein Code:
%Vor%Wenn ich den Bereich mit "ACHTUNG" oben entferne (da ich SICHER bin, habe ich TTS installiert), funktioniert es das erste Mal wenn ich die App starte, wenn ich die App verlasse und ich sie wieder öffne, sagt es "speak failed: nicht an tts engine gebunden"
Es ist so, als würde das TTS-Objekt nicht erstellt, da sich die App noch im Speicher befindet.
Also, Leute ... was denkt ihr, dass ich das tun sollte?
Das macht mich verrückt und ich muss wirklich mit meiner Tochter durch das Tablet kommunizieren!
Jede Hilfe wird geschätzt !!
Das habe ich in onActivityResult(...)
Anstatt if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {...}
zu verwenden, überprüfe ich, ob mTts
bereits instanziiert wurde. Sie müssen auch mTts
als static
setzen, wie von jlquant und Rakesh in einem früheren Beitrag erwähnt, so dass Sie nur eine einzige Instanz davon haben. Zum Beispiel private static TextToSpeech mTts
.
Wenn Sie also die App nicht "erzwingen" oder wegen eines Fehlers aufhören zu arbeiten, ruft sie nicht mehr startActivity(installIntent);
auf - der nervige Übeltäter, der Sie jedes Mal auffordert, TTS zu installieren.
Ich hatte dieses Problem auch bei meiner Anwendung: TTS funktioniert in 2.3, aber als ich 4.0 ausprobierte, hatte es die gleichen Symptome wie Ihr Problem (das ich gerade bei der Suche nach einer Lösung gefunden hatte). Die Engine würde funktionieren, wenn Sie die Anwendung über Einstellungen erzwingen und erneut starten, aber nur "zurückfahren" und zurückgehen, hat die TTS-Engine in ICS nicht gebunden.
Ich habe versucht, das TTS-Objekt (mTts) nach dem Ausführen von mTts.shutdown().
auf null zu setzen. Wenn ich die Anwendung nach dem Zurücksetzen erneut gestartet habe, habe ich einen Nullfehler in meiner mTts.speak()
-Zeile bekommen.
Zumindest bei ICS lässt etwas die TTS-Engine nicht los. Meine Lösung (für den Moment) ist, dass ich mein TTS-Objekt statisch gemacht habe :
%Vor%Ich habe bereits nur ein TTS-Objekt für die Anwendung verwendet, daher glaube ich nicht, dass dieser Ansatz zu viele Nachteile hat.
Ich habe dies behoben, indem ich ivona installiert habe, da beide Tts-Engines alle Probleme behoben haben, obwohl ich andere Probleme feststelle, wie z. B. kein Standard-TTS installiert ist, wobei die beiden zusammen eine Arbeit machen, keine große Lösung, aber s fix,
Ich kann auch nicht finden, dass mein Handy nicht marktfähige Apps wie zB APK von meiner SD-Karte installieren kann
Ich hatte das gleiche Problem und habe es gelöst. Vielleicht ist es ein Timing-Problem in der Grenze, nicht sicher, aber eine einfache Aktion vor dem Sprechen hat mir geholfen. Jedenfalls habe ich das getan:
mTts = new TextToSpeech(this, this);
String engine = mTts.getDefaultEngine();
mTts = new TextToSpeech(this, this,engine);
Log.d("","...something here...");
Dann, wenn ich meinen Sprechtaste drücke, spricht es. Sie sollten Ihren Variablenstatus auf der OnInit-Methode beobachten. Vielleicht kann ein separater Thread helfen, in der App zu sprechen.
Wenn Sie sicher sind, dass TTS installiert ist, können Sie übrigens den Block Intent checkIntent = new Intent();
zum Prüfen entfernen.
Ich hoffe auf jeden Fall, dass dir das weiterhilft.
In meiner App habe ich auch checkintent.setAction(...)
verwendet, um zu prüfen, ob die notwendigen tts-Dateien installiert sind (was vor dem Upgrade auf ICS wie ein Zauber wirkte). In ICS hat es immer zurückgegeben, dass die Dateien fehlen. Jetzt ignoriere ich einfach diese Prüfung: Ich erstelle das Objekt und es initialisiert gut.
Außerdem habe ich zwei Instanzen für zwei verschiedene Sprachen benutzt. Dies scheint auch nicht mehr zu funktionieren.
Wenn ich jetzt die Sprache für eine der Instanzen einstelle, wird die andere Instanz des Objekts auf dieselbe Sprache gesetzt (verhält sich wie eine Instanz).
Lebkuchen erlaubt Einstellung von Standard-TTS in Spracheingabe & amp; Ausgabe / Standardtts
Lebkuchen erlaubt nur "bevorzugte" TTS in Sprache und Eingabe / Text zur Sprachausgabe.
tts wird anstelle von default bevorzugt, was nur bedeutet, dass es nicht so klar ist, welches verwendet wird.
Der Standard mit Anwendungsüberschreibungen, wo angegeben, ist eine bessere Option, denke ich.
Tags und Links android android-4.0 text-to-speech