speech_recognition
speech_recognition copied to clipboard
Flutter Android PIXEL Emulator - _platformCallHandler call speech.onError 2
Hi,
First of all thanks for the utility. It works perfect on iOS. I am having issues with Android Emulator (android-x86). When I start the emulator and then run flutter run I don't see any errors. It loads the speech.dart implementation without any errors. It does get the call speech.onSpeechAvailability true.
Now when I press Listen it throws error
D/SpeechRecognitionPlugin(10082): onError : 2 I/flutter (10082): _platformCallHandler call speech.onSpeechAvailability false I/flutter (10082): _platformCallHandler call speech.onError 2
Here is the full trace from flutter run
Launching lib/main.dart on Android SDK built for x86 in debug mode... registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection) registerResGeneratingTask is deprecated, use registerGeneratedFolders(FileCollection) Built build/app/outputs/apk/debug/app-debug.apk. I/FlutterActivityDelegate(10082): onResume setting current activity to this I/Choreographer(10082): Skipped 56 frames! The application may be doing too much work on its main thread. D/EGL_emulation(10082): eglMakeCurrent: 0xe2885480: ver 3 0 (tinfo 0xe2883440) I/OpenGLRenderer(10082): Davey! duration=1230ms; Flags=1, IntendedVsync=2987461107766, Vsync=2988394441062, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=2988406485133, AnimationStart=2988406770133, PerformTraversalsStart=2988406789133, DrawStart=2988520121133, SyncQueued=2988522026133, SyncStart=2988526756133, IssueDrawCommandsStart=2988526931133, SwapBuffers=2988578172133, FrameCompleted=2988696000133, DequeueBufferDuration=38146000, QueueBufferDuration=10954000, D/ (10082): HostConnection::get() New Host Connection established 0xe2899940, tid 10109 D/EGL_emulation(10082): eglMakeCurrent: 0xceab0960: ver 3 0 (tinfo 0xe2883330) I/flutter (10082): _SpeechBotState.activateSpeechRecognizer... D/SpeechRecognitionPlugin(10082): Current Locale : en_US I/flutter (10082): _platformCallHandler call speech.onCurrentLocale en_US I/flutter (10082): Your currentLocale is en_US I/flutter (10082): _SpeechBotState.start => result true D/SpeechRecognitionPlugin(10082): onRmsChanged : -2.12 D/SpeechRecognitionPlugin(10082): onRmsChanged : -2.12 D/SpeechRecognitionPlugin(10082): onReadyForSpeech I/flutter (10082): _platformCallHandler call speech.onSpeechAvailability true D/SpeechRecognitionPlugin(10082): onRmsChanged : -2.12 D/SpeechRecognitionPlugin(10082): onRmsChanged : -2.0 D/SpeechRecognitionPlugin(10082): onRmsChanged : -2.0 D/SpeechRecognitionPlugin(10082): onRmsChanged : -2.0 D/SpeechRecognitionPlugin(10082): onRmsChanged : -2.0 D/SpeechRecognitionPlugin(10082): onRmsChanged : -2.0 D/SpeechRecognitionPlugin(10082): onRmsChanged : -2.0 D/SpeechRecognitionPlugin(10082): onRmsChanged : -2.12 D/SpeechRecognitionPlugin(10082): onError : 2 I/flutter (10082): _platformCallHandler call speech.onSpeechAvailability false I/flutter (10082): _platformCallHandler call speech.onError 2 I/flutter (10082): Unknowm method speech.onError Application finished. (<-- I stopped it)
in AndroidManifest.xml I have included
I have also opened the app settings in Android settings and provided permission to the app to camera, speaker, microphone.
What does speech.onError 2 mean? and how to fix it in emulator?
Thanks
Looks like after google search I found Error code 2 means Network_error. Still not sure how to fix it in android-emulator x86 in Flutter.
And here is the complete code file Flutter
import 'package:flutter/material.dart'; import 'package:speech_recognition/speech_recognition.dart'; import 'package:tts/tts.dart';
class SpeechBot extends StatefulWidget { @override _SpeechBotState createState() => new _SpeechBotState(); }
class _SpeechBotState extends State<SpeechBot> { SpeechRecognition _speech;
bool _speechRecognitionAvailable = false; bool _isListening = false;
String transcription = '';
String _currentLocale = 'en_US';
@override initState() { super.initState(); activateSpeechRecognizer(); }
// Platform messages are asynchronous, so we initialize in an async method. void activateSpeechRecognizer() { print('_SpeechBotState.activateSpeechRecognizer... '); _speech = new SpeechRecognition(); _speech.setAvailabilityHandler(onSpeechAvailability); _speech.setCurrentLocaleHandler(onCurrentLocale); _speech.setRecognitionStartedHandler(onRecognitionStarted); _speech.setRecognitionResultHandler(onRecognitionResult); _speech.setRecognitionCompleteHandler(onRecognitionComplete); _speech .activate() .then((res) => setState(() => _speechRecognitionAvailable = res)); }
@override Widget build(BuildContext context) { return new MaterialApp( home: new Scaffold( appBar: new AppBar( title: new Text('SpeechRecognition'), ), body: new Padding( padding: new EdgeInsets.all(8.0), child: new Center( child: new Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ new Expanded( child: new Container( padding: const EdgeInsets.all(8.0), color: Colors.grey.shade200, child: new Text(transcription))), _buildButton( onPressed: _speechRecognitionAvailable && !_isListening ? () => start() : null, label: _isListening ? 'Listening...' : 'Listen ($_currentLocale)', ), _buildButton( onPressed: _isListening ? () => cancel() : null, label: 'Cancel', ), _buildButton( onPressed: _isListening ? () => stop() : null, label: 'Stop', ), ], ), )), ), ); }
Widget _buildButton({String label, VoidCallback onPressed}) => new Padding( padding: new EdgeInsets.all(12.0), child: new RaisedButton( color: Colors.cyan.shade600, onPressed: onPressed, child: new Text( label, style: const TextStyle(color: Colors.white), ), ));
void start() => _speech .listen(locale: _currentLocale) .then((result) => print('_SpeechBotState.start => result $result'));
void cancel() => _speech.cancel().then((result) => setState(() { _isListening = result; print('_speech.cancel result is $result'); }));
void stop() => _speech.stop().then((result) => setState(() => _isListening = result));
void onSpeechAvailability(bool result) => setState(() => _speechRecognitionAvailable = result);
void onCurrentLocale(String locale) => setState(() { _currentLocale = locale; print('Your currentLocale is $_currentLocale'); });
void onRecognitionStarted() => setState(() => _isListening = true);
void onRecognitionResult(String text) => setState(() { transcription = text; print('your transcription is $transcription'); });
void onRecognitionComplete() => setState(() { _isListening = false; print('onRecongintionComplete the transcript is $transcription'); Tts.speak(transcription); }); }
Looks like after google search I found Error code 2 means Network_error. Still not sure how to fix it in android-emulator x86 in Flutter.
Same issue here... Any luck???
I have the same issue when running on simulator. But it works fine on real device. Hope this helps other people who got the same issue.
Same issue here