23

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

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

但它无效

4

8 回答 8

49

正如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

于 2012-05-11T09:17:27.100 回答
12

这将起作用:

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

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

建议您使用

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

避免记住这些细节。

于 2013-03-16T09:49:46.900 回答
12

没有解决方案,只有一个hackaround...

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

在这里查看完整的故事。

于 2014-11-01T10:48:50.893 回答
8

你有没有试过这个:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");
于 2012-05-10T17:45:43.290 回答
7

通过添加以下所有 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);

希望这可以帮助某人。

于 2013-07-21T04:25:26.570 回答
2

此代码用于设置语音识别中的语言

  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);
于 2018-09-29T10:36:08.600 回答
1

我试着用

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

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

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault().toString());
于 2017-11-08T19:18:08.320 回答
0

我使用了这段代码:

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

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

于 2015-08-28T18:15:28.520 回答