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

时间:2012-05-10 16:54:32

标签: android speech-recognition

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

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

但它无效

8 个答案:

答案 0 :(得分:43)

正如帕加特所说,这样做会:

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

答案 1 :(得分:12)

没有解决办法,只有黑客攻击......

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

check here完整的故事。

答案 2 :(得分:8)

你试过这个:

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

答案 3 :(得分:8)

这将有效:

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

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

建议您使用

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

以避免记住这些细节。

答案 4 :(得分: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);

希望这有助于某人。

答案 5 :(得分:1)

我尝试使用

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

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

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

答案 6 :(得分:0)

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

  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 :(得分:-1)

我使用了这段代码:

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

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