2015-07-28 84 views
1

我在获取支持的语言时遇到问题。我见过一个解决方案 即创建一个广播接收器,并用语言填充列表。Android上的语音识别支持语言

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

但问题是,我需要这个supportedLanguages列表来填补我的微调。 当我调用该方法getSupportedLanguages,我得到空。

这是我如何使用中的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

你应该回调解决这个问题,以确保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/)行动,在“设置 - >识别语言&服务“列表。

+0

非常感谢您! –