语音识别支持Android上的语言

时间:2015-07-28 11:27:55

标签: android speech-recognition

我在获取支持的语言时遇到问题。我见过一个解决方案 那就是创建一个广播接收器并用语言填充列表。

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

    private String languagePreference;

    @Override
    public void onReceive(Context context, Intent intent)
    {
        //Log.d(Constants.Tag,"OnReceive");
        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);


        }
    }

    public List<String> getSupportedLanguages() {
        return supportedLanguages;
    }
}

但问题是我需要这个supportedRanguages列表来填充我的微调器。 当我调用方法getSupportedLanguages时,我得到null。

这就是我在onCreate中使用广播的方式:

try {
    lang = new LanguageChecker();
    Intent detailsIntent = new Intent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS);
    sendOrderedBroadcast(detailsIntent, null, lang, null, Activity.RESULT_OK, null, null);


    supportedLanguagesForSpeech=lang.getSupportedLanguages();
    Log.d(Constants.Tag, String.valueOf(supportedLanguagesForSpeech.size()));
}
catch (Exception e){
    Log.d(Constants.Tag,e.getMessage());
}

1 个答案:

答案 0 :(得分:1)

您应该使用回调来解决它,以确保分配supportedLanguages。您收到null,因为您没有等待onReceive被调用。

以下是我目前使用支持的语言查询所有可用语音识别服务的解决方案:

https://github.com/Kaljurand/K6nele/blob/3e514edc87e07babb0be57fa31ab48be7e2226e7/app/src/ee/ioc/phon/android/speak/RecognitionServiceManager.java

您可以在Kõnele应用(http://kaljurand.github.io/K6nele/about/),“设置 - &gt;识别语言和服务”列表中看到它的实际效果。