可以讓你實現 Text To Speech 功能,
但有一點要注意, Android 2.2 以前版本(包含 2.2), "離線版本" 只支援 English(英文) / French(法文) / German(德文) / Italian(義大利文) / Spanish(西班牙文),
其他語系若【不支援】或【沒有下載離線語音檔】, 則需要【打開行動網路】, 取得線上語音資料才可,
範例如下 :
程式碼
public class HelloWorld extends Activity { private EditText et; /** TTS 物件 */ private TextToSpeech tts; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 建立 TTS createLanguageTTS(); // 輸入文字 et = new EditText(this); // 按鈕 Button b = new Button(this); b.setText("Speech"); b.setOnClickListener( new OnClickListener(){ @Override public void onClick(View arg0) { //【英文】發音 tts.speak( et.getText().toString(), TextToSpeech.QUEUE_FLUSH, null ); } }); // 版面配置 LinearLayout ll = new LinearLayout(this); ll.setOrientation(LinearLayout.VERTICAL); ll.addView( et, 320, 200 ); ll.addView( b, 320, 100 ); addContentView( ll, new LinearLayout.LayoutParams(320, 480) ); } @Override protected void onDestroy() { // 釋放 TTS if( tts != null ) tts.shutdown(); super.onDestroy(); } private void createLanguageTTS() { if( tts == null ) { tts = new TextToSpeech(this, new OnInitListener(){ @Override public void onInit(int arg0) { // TTS 初始化成功 if( arg0 == TextToSpeech.SUCCESS ) { // 指定的語系: 英文(美國) Locale l = Locale.US; // 不要用 Locale.ENGLISH, 會預設用英文(印度) // 目前指定的【語系+國家】TTS, 已下載離線語音檔, 可以離線發音 if( tts.isLanguageAvailable( l ) == TextToSpeech.LANG_COUNTRY_AVAILABLE ) { tts.setLanguage( l ); } } }} ); } } }
範例結果, 如下 :
另外, 若有發生【speak failed: TTS engine connection not fully set up】問題,
原因是【TTS Engin 建立成功, 但因 "主執行緒" 或 "執行緒池" 已滿, 導致 TTS.speak 沒有位置可以被執行】,
解決為【執行 AsyncTask 由 "execute" 改為 "executeOnExecutor"】.
以上, 參考看看囉.