Windows UWP如何获取具备语音输入(语音识别)功能的已安装语言列表?
在UWP中获取支持语音识别的已安装语言列表
当然可以实现!你之前用UserProfile.GlobalizationPreferences.Languages拿到的是系统所有已安装语言,不管它们有没有对应的语音识别包,所以得用专门针对语音识别的API来筛选出具备语音输入功能的语言。
实现步骤
1. 配置应用权限
首先要在Package.appxmanifest里添加必要的权限:
- 勾选麦克风(语音识别需要访问麦克风权限)
- 可选:勾选Internet客户端(部分云端语音识别功能需要联网支持)
2. 使用SpeechRecognizer的专属API获取支持的语言
UWP提供了Windows.Media.SpeechRecognition.SpeechRecognizer类,它的静态方法GetSupportedLanguageAsync()会返回当前系统中已安装且支持语音识别的语言集合,完美解决你的需求。
VB.NET 示例代码
' 异步获取支持语音识别的语言列表 Async Function GetSupportedSpeechLanguagesAsync() As Task(Of List(Of String)) Dim supportedLanguages As New List(Of String)() Try ' 获取所有支持语音识别的Language对象集合 Dim langCollection = Await Windows.Media.SpeechRecognition.SpeechRecognizer.GetSupportedLanguageAsync() For Each lang In langCollection ' 可以选择只添加语言标签,或者带显示名称的组合文本 supportedLanguages.Add($"{lang.DisplayName} ({lang.LanguageTag})") Next Catch ex As Exception ' 处理异常情况(比如权限不足、系统版本不支持等) Debug.WriteLine($"获取语音识别语言失败:{ex.Message}") End Try Return supportedLanguages End Function ' 加载语言到ComboBox Private Async Sub LoadSpeechRecoLangs() Dim speechLangs = Await GetSupportedSpeechLanguagesAsync() cboSpeechRecoLang.Items.Clear() For Each langText In speechLangs cboSpeechRecoLang.Items.Add(langText) Next End Sub
C# 示例代码(可选参考)
// 异步获取支持语音识别的语言列表 async Task<List<string>> GetSupportedSpeechLanguagesAsync() { var supportedLanguages = new List<string>(); try { var langCollection = await Windows.Media.SpeechRecognition.SpeechRecognizer.GetSupportedLanguageAsync(); foreach (var lang in langCollection) { supportedLanguages.Add($"{lang.DisplayName} ({lang.LanguageTag})"); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine($"获取语音识别语言失败:{ex.Message}"); } return supportedLanguages; } // 加载到ComboBox private async void LoadSpeechRecoLangs() { var speechLangs = await GetSupportedSpeechLanguagesAsync(); cboSpeechRecoLang.Items.Clear(); foreach (var langText in speechLangs) { cboSpeechRecoLang.Items.Add(langText); } }
关键说明
- 必须在异步方法中调用
GetSupportedLanguageAsync(),因为它是异步操作,不能同步执行。 - 返回的
Language对象包含两个常用属性:LanguageTag:标准语言代码(如zh-CN、en-US)DisplayName:用户友好的语言名称(如中文(中华人民共和国))
- 这个API会自动过滤掉没有安装语音识别包的语言,所以返回的都是当前可用的语音输入语言。
内容的提问来源于stack exchange,提问作者henrikl2000
相关产品推荐
相关产品推荐

