2015-07-28 83 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

非常感謝您! –