maui需借助原生api或第三方服务实现语音识别,推荐使用plugin.maui.audio插件,支持android/ios/macos,调用系统引擎且无需密钥;也可手动集成android原生speechrecognizer或适配ios sfspeechrecognizer;高精度需求可选azure speech sdk。

MAUI 本身不内置语音识别(Speech-to-Text)功能,需借助平台原生 API 或第三方服务实现。目前最稳定、跨平台兼容性较好的方案是调用各平台的原生语音识别能力,并通过 MAUI 的 DependencyService 或 MauiHandlers/Custom Controls 封装,或直接使用社区维护的成熟 NuGet 包。
推荐方案:使用 Plugin.Maui.Audio(含 Speech-to-Text)
这是目前 MAUI 生态中较活跃、支持 Android/iOS/macOS 的轻量级插件,底层调用系统原生语音识别引擎(Android 使用 SpeechRecognizer,iOS 使用 SFSpeechRecognizer),无需额外配置密钥,离线基础识别可用(依赖系统语言模型)。
- 安装 NuGet:
Plugin.Maui.Audio(注意选最新预发行版,如2.4.0-pre.1及以上) - 在
MauiProgram.cs中注册服务:builder.Services.AddAudio(); - 在页面中注入并调用:
var speech = Audio.Current.SpeechToText;
if (await speech.RequestPermissionsAsync()) {
var result = await speech.ListenAsync(
new SpeechToTextOptions {
// 可选:设置语言(如 "zh-CN"、"en-US")
Culture = new CultureInfo("zh-CN"),
// 提示语(Android 有效)
Prompt = "请开始说话"
});
if (result.IsSuccess)
Console.WriteLine($"识别结果:{result.Text}");
}
Android 平台手动集成(无需插件)
若需更细粒度控制(如实时流式识别、自定义监听回调),可直接调用 Android 原生 SpeechRecognizer。需在 MAUI 的 Android 项目中扩展 MainActivity,注册广播接收器或使用 Intent 启动识别 Activity。
- 添加权限到
AndroidManifest.xml:<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission> - 在
MainActivity.cs中处理ActivityResult回调,启动Intent.ActionWebSearch或自定义SpeechRecognizer实例 - 通过
DependencyService在 .NET 层暴露StartListening()和OnResult事件
iOS 注意事项与适配要点
iOS 要求显式声明麦克风用途,并在 Info.plist 中添加键值:
-
NSMicrophoneUsageDescription—— 值为用户可见的授权提示文案,例如“用于语音转文字输入” - iOS 17+ 需确保 App 支持
SFSpeechRecognizer的实时识别模式(isAvailable检查 +supportsOnDeviceRecognition判断) - 首次使用需用户手动开启「听写」系统设置(Settings → General → Keyboard → Enable Dictation)
替代方案:调用 Azure Cognitive Services(在线识别)
若需高准确率、多语种、标点自动添加、自定义词典等能力,可接入 Azure Speech SDK。它提供官方 MAUI 兼容的 Azure.AI.Speech NuGet 包(v1.35+ 支持 .NET 6+)。
- 需申请 Azure 订阅并获取
speech key和region - 初始化时指定音频输入源(如
AudioConfig.FromDefaultMicrophoneInput()) - 注意:纯在线识别,无网络则失败;适合联网环境下的专业场景
基本上就这些。优先推荐 Plugin.Maui.Audio,开箱即用、维护活跃;有特殊需求再考虑原生封装或 Azure 方案。记得始终检查权限、文化设置和平台限制,语音识别体验很依赖系统底层支持。









