如何在Android上设置语音识别语言?

Mr.*_*.Me 19 android speech-recognition

我一直在研究Android中的语音识别API,发现当语言设置改变时语音结果会有所不同,有没有办法以编程方式设置它?或者是否打算在语音设置屏幕上午餐?或者还有什么?注意:我试图使用这个额外的意图:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en-US");
Run Code Online (Sandbox Code Playgroud)

但它无效

gre*_*egm 46

帕加特说,这样做会:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");
Run Code Online (Sandbox Code Playgroud)

此外,您的应用可以通过发送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);
Run Code Online (Sandbox Code Playgroud)

其中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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为使用RecognizerIntent方法更容易创建intent:`val detailsIntent = RecognizerIntent.getVoiceDetailsIntent(context)activity.sendOrderedBroadcast(detailsIntent,null,LanguageDetailsChecker({languages.accept(it)}),null,Activity.RESULT_OK,null ,null)`来自上面示例的意图对我不起作用:( getVoiceDetailsIntent()确实:) (4认同)
  • 放置“en-US”对我不起作用。使用 `intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.US.toString());`,如@orina1123 的回答所建议 (3认同)

Arn*_* M. 12

没有解决方案,但是黑客......

intent.putExtra("android.speech.extra.EXTRA_ADDITIONAL_LANGUAGES", new String[]{"en"});
Run Code Online (Sandbox Code Playgroud)

在这里查看完整的故事.

  • 伙计我不知道为什么你只有1分,但这绝对是一个正确的答案.非常感谢. (2认同)

小智 10

这将有效:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en_US");
Run Code Online (Sandbox Code Playgroud)

你必须使用"en_US"而不是"en-US".前者是Java语言环境标记的正确格式.

建议您使用

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.US.toString());
Run Code Online (Sandbox Code Playgroud)

避免记住这些细节.


Par*_*gat 8

你试过这个:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");
Run Code Online (Sandbox Code Playgroud)


kwi*_*hnu 6

我终于得到了我的应用程序,将语音识别结果限制为指定的语言输入(通过添加以下所有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);
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人.

  • 你真的把所有这些都放到了传递给startListening的意图中吗?它真的有效吗?并没有单独使用EXTRA_LANGUAGE吗?您测试了哪些Android版本?EXTRA_LANGUAGE是唯一应该与此相关的内容.根据文档,另外两个用于查询系统支持的语言,而不是用于识别.所以他们在这里应该毫无意义.对我来说,单独使用EXTRA_LANGUAGE直到4.3,然后从4.4开始完全忽略额外的. (3认同)