【问题标题】:How to set the language in speech recognition on android?如何在android上设置语音识别中的语言?
【发布时间】:2012-05-10 16:54:31
【问题描述】:

我一直在研究 android 中的语音识别 API,发现更改语言设置时语音结果会有所不同,有没有办法以编程方式进行设置?还是有意在语音语言设置屏幕上午餐?还是什么? 笔记: 我试图额外使用这个意图:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en-US");

但是没有效果

【问题讨论】:

  • intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, Locale.getDefault()); ..如果谷歌支持该语言,它将运行..
  • 应该用于该目的的额外内容是 EXTRA_LANGUAGE,而不是 EXTRA_LANGUAGE_PREFERENCE。但是,由于某种原因,LANGUAGE_EXTRA 仅在 4.3 之前有效。从 4.4 开始,Android 允许在 Settings 中选择多种语言,并且会一直尝试根据系统设置“猜测”语言,并完全忽略 EXTRA_LANGUAGE 额外的。那么,有人吗?

标签: android speech-recognition


【解决方案1】:

正如 pargat 所说,这样就可以了:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");

此外,您的应用可以通过发送RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS 有序广播来查询支持的语言列表,如下所示:

    Intent detailsIntent =  new Intent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS);
    sendOrderedBroadcast(
            detailsIntent, null, new LanguageDetailsChecker(), null, Activity.RESULT_OK, null, null);

LanguageDetailsChecker 是这样的:

public class LanguageDetailsChecker extends BroadcastReceiver
{
    private List<String> supportedLanguages;

    private String languagePreference;

    @Override
    public void onReceive(Context context, Intent intent)
    {
        Bundle results = getResultExtras(true);
        if (results.containsKey(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE))
        {
            languagePreference =
                    results.getString(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE);
        }
        if (results.containsKey(RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES))
        {
            supportedLanguages =
                    results.getStringArrayList(
                            RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES);
        }
    }
}

有关完整代码,请查看此 github 项目: https://github.com/gast-lib

【讨论】:

  • 我认为使用 RecognizerIntent 方法创建意图更容易:` val detailsIntent = RecognizerIntent.getVoiceDetailsIntent(context) activity.sendOrderedBroadcast(detailsIntent, null, LanguageDetailsChecker({languages.accept(it) }) , null, Activity.RESULT_OK, null, null)` 上面示例中的 Intent 对我不起作用:( getVoiceDetailsIntent() 确实:)
  • 输入“en-US”对我不起作用。按照@orina1123 的回答建议使用intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.US.toString());
  • RecognizerIntent.getVoiceDetailsIntent(context) 是正确的方法。在 Android Q 上,如果没有它,我会得到 null。
  • 您需要设置detailsIntent.setPackage("com.google.android.googlequicksearchbox"); 才能使用,请参阅stackoverflow.com/a/48653201
【解决方案2】:

这将起作用:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en_US");

您必须使用“en_US”而不是“en-US”。前者是Java语言环境标签的正确格式。

建议大家使用

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.US.toString());

为了避免记住这些细节。

【讨论】:

【解决方案3】:

没有解决办法,只有一个hackaround...

intent.putExtra("android.speech.extra.EXTRA_ADDITIONAL_LANGUAGES", new String[]{"en"});

check here 完整的故事。

【讨论】:

  • 伙计,我不知道为什么你只有 1 分,但这绝对是一个正确的答案。非常感谢。
  • @TacB0sS 人们喜欢长答案...我很高兴它对你有所帮助。
  • 我得到的最有用的答案!真的。
【解决方案4】:

你试过了吗:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");

【讨论】:

    【解决方案5】:

    通过添加以下所有 3 个附加功能,我终于让我的应用程序将语音识别结果限制为指定的语言输入(交给它,例如日语的“ja”或法语的“fr”):

    String languagePref = "de";//or, whatever iso code...
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, languagePref);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, languagePref); 
    intent.putExtra(RecognizerIntent.EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE, languagePref);
    

    希望这对某人有所帮助。

    【讨论】:

    • 你真的把所有这些都放入了你传递给 startListening 的意图中吗?真的有用吗?而且不是单独使用EXTRA_LANGUAGE吗?您测试了哪些 Android 版本? EXTRA_LANGUAGE 是唯一应该与此处相关的语言。根据文档,另外两个用于查询系统以获取支持的语言,而不是用于识别。所以它们在这里应该是完全没有意义的。对我来说,它只适用于 EXTRA_LANGUAGE 直到 4.3,然后从 4.4 开始完全忽略额外内容。
    • 我不确定 api 是否已更改,但 EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE 采用布尔值。
    【解决方案6】:

    这段代码是设置语音识别的语言

      String languagePref = "te-IN";//this is for telugu
    
         //kannada --->  "kn-IN"
         //tamil--->  "ta-IN".....
    
                Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
                intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                        RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
                intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, languagePref);
    

    【讨论】:

      【解决方案7】:

      我尝试使用

      intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
      

      但它对我不起作用(没有采用系统语言)。 像这样帮助这里:

      intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault().toString());
      

      【讨论】:

        【解决方案8】:

        我使用了这个代码:

        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US");
        

        希望您现在可以运行您的应用程序。

        【讨论】:

          猜你喜欢
          • 2022-06-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多