2016-07-04 2 views
4

Я устанавливаю свой TextToSpeech для использования определенного языка (английский - Великобритания), используя локаль «en_GB». Но он всегда использует мой язык по умолчанию для устройств. Нет ли способа установить его программно? Я загрузил файлы, необходимые для этого языка, и когда я меняю свой язык по умолчанию на TTS на «Английский - Великобритания», он работает, но когда значение по умолчанию отличается, программный подход не работает. Я пробовал Интернет в своих силах, но не могу решить эту проблему.TextToSpeech setLanguage не работает?

String ttsEngine = "com.google.android.tts"; 
    txt2Speech = new TextToSpeech(this, this, ttsEngine); 
    //Locale ttsLocale = new Locale("eng", "GBR"); 
    txt2Speech.setLanguage(new Locale("en_GB")); 

Пробовал несколько методов, но никто не работает. Могу ли я программировать язык TTS?

Спасибо

EDIT: В ответ на

Другой код 'медовой Дрофа':

public class MainActivity extends AppCompatActivity implements TextToSpeech.OnInitListener 

Мои onInit()

public void onInit(int status) { 
    // TODO Auto-generated method stub 

} 

Также я звоню .setLanguage() в мой onCreate(), как только мой TextToSpeech инициализируется. Это верно? Также я звоню только один раз. Не обязательно звонить ему каждый раз? Также я тестирую на GS7

+0

Вам нужно установить его в 'onInit()' и проверить результат. Это предполагает, что статус 'onInit()' равен 'SUCCESS' – brandall

+1

@brandall Большое вам спасибо! Постановка в 'onInit()' решена. Пожалуйста, разместите его в качестве ответа, чтобы я мог отметить его как правильно. :) –

+0

Выполнено. Рад, что это сработало. – brandall

ответ

2

Необходимо установить язык после правильной инициализации Text to Speech Engine.

public void onInit(int status) { 

    switch (status) { 

     case SUCCESS: 
     // Set the language here 
     break; 
     case ERROR: 
     // Something went wrong. You can't set the language 
     break; 
    } 
} 

Это должно быть сделано.

3

Попробуйте второй конструктор из Locale, который принимает две строки, как это:

txt2Speech.setLanguage(new Locale("en", "GB")); 

EDIT:

Да, как правило, хорошо, чтобы сделать его экземпляр в OnCreate, и обычно это нужно только и нужно делать один раз.

Все, что я могу сделать, это показать вам мой рабочий код, я устанавливаю язык по умолчанию после инстанцирования в OnCreate():

textToSpeech = new TextToSpeech(getApplicationContext(), this); 

    textToSpeech.setLanguage(Locale.getDefault()); 

В моем приложении есть кнопки, в котором вы можете изменить язык, который запустить этот код (случай британский английский):

textToSpeech.setLanguage(new Locale("en", "GB")); 

может быть, он не доступен так или иначе, есть некоторые проверки можно проверить, если язык и страна доступна. Вы можете найти свою ошибку там.

if (textToSpeech.isLanguageAvailable(new Locale("en", "GB")) == TextToSpeech.LANG_COUNTRY_AVAILABLE 
    && textToSpeech.isLanguageAvailable(new Locale("en", "GB")) == TextToSpeech.LANG_AVAILABLE) 

должно быть верным.

+0

@A Honey Bustard Спасибо за ответ. Но все равно не работает. Также попробовали '' eng ',' GBR''.Не работайте. Даже попробовал другой язык, как испанский, но все еще не работал. Любой другой метод? Спасибо –

+0

Возможно, попробуйте другой конструктор TTS, который использует по умолчанию Engine: text2Speech = new TextToSpeech (getApplicationContext(), this); –

+0

@ A Honey Bustard Нет, он по-прежнему использует язык по умолчанию. :( –

Смежные вопросы