feat(tts): ensure Android default TTS engine is set before speaking

This commit is contained in:
cogwheel0
2025-11-21 12:20:01 +05:30
parent f11f9c6558
commit 36915fba09
2 changed files with 19 additions and 0 deletions

View File

@@ -20,6 +20,9 @@
<intent>
<action android:name="android.speech.RecognitionService" />
</intent>
<intent>
<action android:name="android.intent.action.TTS_SERVICE" />
</intent>
</queries>
<application

View File

@@ -79,6 +79,7 @@ class TextToSpeechService {
}) async {
_deviceEngineAvailable = false;
try {
await _ensureAndroidDefaultEngine();
await _tts.awaitSpeakCompletion(false);
await _tts.setVolume(volume);
await _tts.setSpeechRate(speechRate);
@@ -108,6 +109,20 @@ class TextToSpeechService {
}
}
Future<void> _ensureAndroidDefaultEngine() async {
if (kIsWeb || !Platform.isAndroid) {
return;
}
try {
final engine = await _tts.getDefaultEngine;
if (engine is String && engine.isNotEmpty) {
await _tts.setEngine(engine);
}
} catch (e) {
_onError?.call(e.toString());
}
}
bool _computeAvailability() {
final serverAvailable = _api != null;
switch (_engine) {
@@ -808,6 +823,7 @@ class TextToSpeechService {
var configured = false;
try {
await _ensureAndroidDefaultEngine();
Map<String, dynamic>? defaultVoice;
bool voiceSet = false;