我有一个 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 中:
<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>
尝试将 onDevice 选项切换为 false。
在初始化之前,请确保您没有从库中调用/访问任何内容。文档中的某个地方有一个关于它的小注释。而且该库在较旧的 Android 版本上存在很多问题,请从可用的库中获取区域设置(该库有获取区域设置的功能),要小心,因为不同手机/Android 版本上的名称有所不同,如果没有不存在,您必须编写一些本机代码来提示用户下载它。在某些手机上,默认情况下没有选择识别器,因此您必须从手机设置中将谷歌语音识别器设置为默认值(也可以在本机中以编程方式完成)。