title: Not Bound To TTS Engine
body: <p>I'm trying to make speaking dictionary.</p>
  
  <p>LogCat shows <em>"Successfully bound to com.android.tts"</em> but when the <kbd>Speak</kbd> button clicked, it shows <em>"failed speak : not bound to tts engine"</em>.</p>
  
  <p>But on AVD it runs smoothly, why?</p>
  
  <p><strong>This Is my goTranslator class:</strong></p>
  
  <pre><code>package sk.team;
  
  import android.app.Activity;
  import android.database.Cursor;
  import android.database.sqlite.SQLiteDatabase;
  import android.os.Bundle;
  import android.view.View;
  import android.widget.Button;
  import android.widget.EditText;
  import android.widget.RadioButton;
  import android.speech.tts.TextToSpeech;
  import android.widget.Toast;
  import android.content.Intent;
  import android.content.res.Configuration;
  
  import java.util.Locale;
  
  public class goTranslator extends Activity implements TextToSpeech.OnInitListener{
  
      private int MY_DATA_CHECK_CODE = 0;
      private TextToSpeech tts;
      private SQLiteDatabase db = null;
      private Cursor translatorCursor = null;
      private EditText txtSearch;
      private EditText txtResult;
      private AppDatabase dbtranslator = null;
      private RadioButton Eng,Ind;
      private Button Translate,Speak;
      public static final String ENGLISH = "english";
      public static final String INDONESIA = "indonesia";
  
      public void onInit(int status) { 
          if (status == TextToSpeech.SUCCESS) {
              Toast.makeText(goTranslator.this,
                      "Text-To-Speech engine is initialized", Toast.LENGTH_LONG).show();
          } else if (status == TextToSpeech.ERROR) {
              Toast.makeText(goTranslator.this,
                      "Error occurred while initializing Text-To-Speech engine",
                      Toast.LENGTH_LONG).show();
          }
      }
  
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          if (requestCode == MY_DATA_CHECK_CODE) {
              if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
                  tts = new TextToSpeech(this, this);
              } else {
                  Intent installIntent = new Intent();
                  installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
                  startActivity(installIntent);
              }
          }
      }
  
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
  
          dbtranslator = new AppDatabase(this);
          db = dbtranslator.getWritableDatabase();
          setContentView(R.layout.main);
  
          dbtranslator.createTable(db);
          dbtranslator.generateData(db);
  
          Eng = (RadioButton) findViewById(R.id.Eng);
          Ind = (RadioButton) findViewById(R.id.Ind);
          Translate = (Button) findViewById(R.id.Translate);
          Speak = (Button) findViewById(R.id.Speak);
          txtSearch = (EditText) findViewById(R.id.txtSearch);
          txtResult = (EditText) findViewById(R.id.txtResult);
  
          Intent checkIntent = new Intent();
          checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
          startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
  
          Speak.setOnClickListener(new View.OnClickListener() {   
  
              public void onClick(View v) {
                  String text = txtResult.getText().toString();
  
                  if (text!=null &amp;&amp; text.length()&gt;0) {
                      Toast.makeText(goTranslator.this, "Saying: " + text,
                              Toast.LENGTH_LONG).show();
                      tts.speak(text, TextToSpeech.QUEUE_ADD, null);
                  }
              }
          });
      }
  
      public void Translate (View view) {
          if (view == Translate) {
              if (Eng.isChecked()) {
                  txtSearch.setHint("Masukkan Kata");
  
                  Locale loc = new Locale ("es_ES");
                  tts.setLanguage(loc);
  
                  String result = "";
                  String englishword = txtSearch.getText().toString().trim().toLowerCase();
                  translatorCursor = db.rawQuery("SELECT ID, ENGLISH, INDONESIA "
                          + "FROM translator where ENGLISH='" + englishword
                          + "' ORDER BY ENGLISH", null);
  
                  if (translatorCursor.moveToFirst()) {
                      result = translatorCursor.getString(2);
                      for (; !translatorCursor.isAfterLast(); translatorCursor.moveToNext()) {
                          result = translatorCursor.getString(2);
                      }
                  }
                  if (result.equals("")) {
                      result = "Kata Tidak Tersedia";
                  }
                  txtResult.setText(result);
              }
  
              if (Ind.isChecked()) {
                  txtSearch.setHint("Enter Word");
  
                  Locale loc = new Locale ("en_US");
                  tts.setLanguage(loc);
  
                  String result = "";
                  String indonesiaword = txtSearch.getText().toString().trim().toLowerCase();
                  translatorCursor = db.rawQuery("SELECT ID, ENGLISH, INDONESIA "
                          + "FROM translator where INDONESIA='" + indonesiaword
                          + "' ORDER BY INDONESIA", null);
  
                  if (translatorCursor.moveToFirst()) {
                      result = translatorCursor.getString(1);
                      for (; !translatorCursor.isAfterLast(); translatorCursor.moveToNext()) {
                          result = translatorCursor.getString(1);
                      }
                  }
                  if (result.equals("")) {
                      result = "Result Not Found";
                  }
                  txtResult.setText(result);
              }
          }
      }
  
      @Override
      public void onConfigurationChanged(Configuration newConfig) {
          super.onConfigurationChanged(newConfig);
          setContentView(R.layout.main);
      }
  
      @Override
      public void onDestroy() {
          super.onDestroy();
  
          if (tts != null) {
              tts.stop();
              tts.shutdown();
          }
  
          if (translatorCursor != null) {
              translatorCursor.close();
              db.close();
          }
      }
  }
  </code></pre>