Преобразование речи в текст не работает на Android

#android #flutter #speech-to-text #google-speech-to-text-api

Вопрос:

У меня есть приложение в Flutter, которое работает на Android и iOS. На iOS все работает идеально. Но на Android я сталкиваюсь с некоторыми проблемами с преобразованием речи в текст…

Я использую этот плагин: https://pub.flutter-io.cn/packages/speech_to_text/

Мой код для Android таков:

 void startListeningAndroid(BuildContext context) async {
    try {
      speech.listen(
        onResult: (SpeechRecognitionResult result) {
          processWords(result, context);
        },
        listenFor: Duration(seconds: 10),
        localeId: _currentLocaleId,
        onSoundLevelChange: soundLevelListener,
        cancelOnError: false,
        partialResults: true,
        onDevice: true,
        listenMode: ListenMode.dictation,
        pauseFor: Duration(seconds: 9),
      );
    } catch (e) {
      print(e.toString());
    }
    setState(() {});
  }
 

И каждые 11 секунд я снова начинаю прослушивание со следующего кода:

 if (Platform.isAndroid) {
      timerSpeech = Timer.periodic(Duration(seconds: 11), ((Timer t) async {
        if (voiceRecognitionActivated) {
          startListeningAndroid(context);
        }
      }));
    }
 

Но как только я начинаю листать, я получаю следующий журнал:

 initSpeechState error SpeechRecognitionError msg: error_speech_timeout, permanent: true
initSpeechState error SpeechRecognitionError msg: error_client, permanent: true
 

Код тот же, что работал раньше, он даже не издает «звуковой сигнал», как это было раньше, каждый раз, когда работал лисенинг.
Есть ли какие-либо изменения в политике Android или в версии подключения, которые могут вызвать эту проблему?

Также в AndroidManifest.xml в папке main и debug у меня есть:

 <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <queries>
        <intent>
            <action android:name="android.speech.RecognitionService" />
        </intent>
    </queries>
 

Ответ №1:

Попробуйте переключить параметр onDevice на значение false.