如何在android上设置语音识别中的语言?

如何在android上设置语音识别中的语言?,android,speech-recognition,Android,Speech Recognition,我一直在android上开发语音识别API,发现当语言设置发生变化时,语音结果会发生变化,有没有办法通过编程进行设置?或者是否有意在语音语言设置屏幕上使用午餐?或者别的什么? 注: 我试图使用这个额外的意图: intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en-US"); 但是没有效果你试过这个吗: intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");

我一直在android上开发语音识别API,发现当语言设置发生变化时,语音结果会发生变化,有没有办法通过编程进行设置?或者是否有意在语音语言设置屏幕上使用午餐?或者别的什么? 注: 我试图使用这个额外的意图:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en-US");
但是没有效果

你试过这个吗:

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

正如帕加特所说,这将做到:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");
此外,您的应用程序还可以通过发送
RecognizerIntent.ACTION\u GET\u LANGUAGE\u DETAILS
有序广播来查询支持的语言列表,如下所示:

    Intent detailsIntent =  new Intent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS);
    sendOrderedBroadcast(
            detailsIntent, null, new LanguageDetailsChecker(), null, Activity.RESULT_OK, null, null);
其中LanguageDetailsSchecker是这样的:

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);
        }
    }
}
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault().toString());
public类语言detailschecker扩展了BroadcastReceiver
{
私有列表支持的语言;
私有字符串语言偏好;
@凌驾
公共void onReceive(上下文、意图)
{
Bundle results=getResultTextras(true);
if(results.containsKey(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE))
{
语言偏好=
results.getString(RecognizerIntent.EXTRA_LANGUAGE_首选项);
}
if(results.containsKey(RecognizerIntent.EXTRA_支持的语言))
{
支持的语言=
results.getStringArrayList(
RecognizerIntent.EXTRA_支持的_语言);
}
}
}
有关完整代码,请查看此github项目:

这将起作用:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en_US");
你必须用“en_US”而不是“en US”。前者是Java语言环境标记的正确格式

建议您使用

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

为了避免记住这些细节。

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

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);

希望这对某人有所帮助。

没有解决办法,只有一个黑客破解

intent.putExtra("android.speech.extra.EXTRA_ADDITIONAL_LANGUAGES", new String[]{"en"});
完整的故事。

我使用了以下代码:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US");
希望您现在可以运行应用程序。

我尝试使用

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
但它对我不起作用(不采用系统语言)。 我在这里是这样帮助的:

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);
        }
    }
}
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault().toString());

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

  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);

intent.putExtra(RecognizerIntent.EXTRA_语言_首选项,Locale.getDefault())。。如果gooogle支持该语言,它将运行。应该用于该目的的额外功能是额外的语言,而不是额外的语言偏好。然而,由于某些原因,语言_EXTRA只能在4.3之前使用。从4.4开始,Android允许在设置中选择多种语言,并将始终根据系统设置尝试“猜测”语言,完全忽略额外的语言。那么,有人吗?你真的把所有这些都放进了你的意图中去了吗??真的有用吗?单凭额外的语言不是吗?你测试了哪些Android版本?额外的语言是这里唯一相关的语言。根据文档,另外两个用于查询系统支持的语言,而不是用于识别。所以它们在这里应该毫无意义。对我来说,它在4.3之前只使用额外的语言,然后从4.4开始完全忽略额外的语言。我不确定api是否已更改,但
EXTRA\u ONLY\u RETURN\u LANGUAGE\u首选项
采用布尔值。老兄,我不知道你为什么只有1分,但这肯定是正确的答案。非常感谢。@TacB0sS的人喜欢冗长的答案……我很高兴它帮助了你们。这是我得到的最有用的答案!真的。我认为使用RecognizerIntent方法创建意图更容易:`val detailsinent=RecognizerIntent.getVoiceDetailsinent(context)activity.sendOrderedBroadcast(detailsinent,null,LanguageDetailsSchecker({languages.accept(it)}),null,activity.RESULT_OK,null,null)`上面示例中的意图对我不起作用:(GetVoiceDetailsInt()确实:)放置“en-US”对我不起作用。使用
intent.putExtra(RecognizerIntent.EXTRA_语言,Locale.US.toString());
正如@orina1123RecognizerIntent.GetVoiceDetailsInt(上下文)在回答中建议的那样这是正确的方法。我在Android Q上没有它就得到了空值。谢谢,伙计。这节省了我几个小时的时间!!!问题很相似,但差别不大。你可以在这里找到它