在 Flutter 中创建语音识别应用程序时如何处理此错误?

How to deal with this error when you are creation a Speech Recognition app in flutter?

D/SpeechRecognitionPlugin(10845): onError : 3    
I/flutter (10845): _platformCallHandler call speech.onSpeechAvailability false
I/flutter (10845): _platformCallHandler call speech.onError 3 
I/flutter (10845): Unknown

这是我的脚本:

 import 'package:flutter/material.dart'; import
 'package:speech_recognition/speech_recognition.dart';

 void main() => runApp(MyApp());

 class MyApp extends StatelessWidget {   @override   Widget
 build(BuildContext context) {
     return MaterialApp(
       home: VoiceHome(),
     );   } }

 class VoiceHome extends StatefulWidget {   @override   _VoiceHomeState
 createState() => _VoiceHomeState(); }

 class _VoiceHomeState extends State<VoiceHome> {   SpeechRecognition
 _speechRecognition;   bool _isAvailable = false;   bool _isListening = false;

   String resultText = "";

   @override   void initState() {
     super.initState();
     initSpeechRecognizer();   }

   void initSpeechRecognizer() {
     _speechRecognition = SpeechRecognition();

     _speechRecognition.setAvailabilityHandler(
           (bool result) => setState(() => _isAvailable = result),
     );

     _speechRecognition.setRecognitionStartedHandler(
           () => setState(() => _isListening = true),
     );

     _speechRecognition.setRecognitionResultHandler(
           (String speech) => setState(() => resultText = speech),
     );

     _speechRecognition.setRecognitionCompleteHandler(
           () => setState(() => _isListening = false),
     );

     _speechRecognition.activate().then(
           (result) => setState(() => _isAvailable = result),
     );   }

   @override   Widget build(BuildContext context) {
     return Scaffold(
       body: Container(
         child: Column(
           mainAxisAlignment: MainAxisAlignment.center,
           crossAxisAlignment: CrossAxisAlignment.center,
           children: <Widget>[
             Row(
               mainAxisAlignment: MainAxisAlignment.center,
               children: <Widget>[
                 FloatingActionButton(
                   child: Icon(Icons.cancel),
                   mini: true,
                   backgroundColor: Colors.deepOrange,
                   onPressed: () {
                     if (_isListening)
                       _speechRecognition.cancel().then(
                             (result) => setState(() {
                           _isListening = result;
                           resultText = "";
                         }),
                       );
                   },
                 ),
                 FloatingActionButton(
                   child: Icon(Icons.mic),
                   onPressed: () {
                     if (_isAvailable && !_isListening)
                       _speechRecognition
                           .listen(locale: "en_US")
                           .then((result) => print('$result'));
                   },
                   backgroundColor: Colors.pink,
                 ),
                 FloatingActionButton(
                   child: Icon(Icons.stop),
                   mini: true,
                   backgroundColor: Colors.deepPurple,
                   onPressed: () {
                     if (_isListening)
                       _speechRecognition.stop().then(
                             (result) => setState(() => _isListening = result),
                       );
                   },
                 ),
               ],
             ),
             Container(
               width: MediaQuery.of(context).size.width * 0.8,
               decoration: BoxDecoration(
                 color: Colors.cyanAccent[100],
                 borderRadius: BorderRadius.circular(6.0),
               ),
               padding: EdgeInsets.symmetric(
                 vertical: 8.0,
                 horizontal: 12.0,
               ),
               child: Text(
                 resultText,
                 style: TextStyle(fontSize: 24.0),
               ),
             )
           ],
         ),
       ),
     );   } }

3其实是指录音错误。假设您使用 android 模拟器或设备进行测试。 Source

这会给你一些提示来解决你的问题。您是否在 androidManifest.xml 中添加了您的权限?

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android" package="cookmakeeasy.xion.flutter_app_arthas">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO" /> <-- this line