flutter如何集成speech_to_text实现语音识别

在Flutter项目中集成speech_to_text库实现语音识别时,遇到了一些问题。具体步骤如下:

  1. 已添加speech_to_text依赖并运行flutter pub get
  2. 按照文档配置了AndroidManifest.xml中的麦克风权限
  3. 初始化识别器时调用initialize()方法

但实际运行时始终返回false,无法启动语音监听。请问:

  • 是否需要额外配置iOS/Android的本地权限弹窗?
  • 有没有完整的示例代码包含错误处理逻辑?
  • 在模拟器上测试时需要特别注意什么?

(注:已在真机测试过相同问题)

2 回复

要在Flutter中集成speech_to_text实现语音识别,步骤如下:

  1. 添加依赖:在pubspec.yaml中添加:

    dependencies:
      speech_to_text: ^6.6.0
    
  2. 配置权限(Android/iOS):

    • Android:在AndroidManifest.xml中添加录音权限:
      <uses-permission android:name="android.permission.RECORD_AUDIO" />
      
    • iOS:在Info.plist中添加麦克风使用描述:
      <key>NSMicrophoneUsageDescription</key>
      <string>需要麦克风权限进行语音识别</string>
      
  3. 初始化与权限请求

    final SpeechToText _speech = SpeechToText();
    bool _isAvailable = await _speech.initialize();
    
  4. 开始监听与识别

    if (_isAvailable) {
      _speech.listen(
        onResult: (result) {
          print(result.recognizedWords); // 输出识别结果
        },
      );
    }
    
  5. 停止监听

    _speech.stop();
    

注意:需处理用户授权,若权限被拒需引导用户手动开启。

更多关于flutter如何集成speech_to_text实现语音识别的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中集成speech_to_text库实现语音识别,步骤如下:

1. 添加依赖

pubspec.yaml 文件中添加:

dependencies:
  speech_to_text: ^6.6.0

运行 flutter pub get 安装。

2. 配置权限

Android

android/app/src/main/AndroidManifest.xml 中添加:

<uses-permission android:name="android.permission.RECORD_AUDIO" />

iOS

ios/Runner/Info.plist 中添加:

<key>NSMicrophoneUsageDescription</key>
<string>需要麦克风权限进行语音识别</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>需要语音识别权限</string>

3. 基本代码实现

import 'package:flutter/material.dart';
import 'package:speech_to_text/speech_to_text.dart' as stt;

class SpeechScreen extends StatefulWidget {
  @override
  _SpeechScreenState createState() => _SpeechScreenState();
}

class _SpeechScreenState extends State<SpeechScreen> {
  stt.SpeechToText _speech = stt.SpeechToText();
  bool _isListening = false;
  String _text = '点击按钮开始语音识别';

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

  void _initSpeech() async {
    bool available = await _speech.initialize(
      onStatus: (status) => print('状态: $status'),
      onError: (error) => print('错误: $error'),
    );
    if (!available) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('语音识别不可用')),
      );
    }
  }

  void _listen() async {
    if (!_isListening) {
      bool available = await _speech.listen(
        onResult: (result) => setState(() {
          _text = result.recognizedWords;
        }),
        listenFor: Duration(seconds: 30),
        pauseFor: Duration(seconds: 5),
      );
      if (available) {
        setState(() => _isListening = true);
      }
    } else {
      _speech.stop();
      setState(() => _isListening = false);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('语音识别')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(_text, style: TextStyle(fontSize: 20)),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _listen,
              child: Text(_isListening ? '停止录音' : '开始录音'),
            ),
          ],
        ),
      ),
    );
  }
}

4. 关键说明

  • initialize(): 初始化语音识别,检查设备支持情况
  • listen(): 开始监听语音输入
  • stop(): 停止监听
  • onResult: 接收识别结果的回调
  • 支持设置监听时长(listenFor)和暂停时长(pauseFor

5. 注意事项

  • 真机测试权限申请
  • iOS需要在物理设备上运行
  • 可配置识别语言:localeId: "zh-CN"

这样就完成了基本的语音识别功能集成。

回到顶部