title: TTS: Speak fails
body: <p>I am using a simple code to use Text-To-Speech:</p>
  <pre class="lang-java prettyprint-override"><code>package ch.yourclick.kitt.fragments;
  
  import android.os.Bundle;
  import androidx.fragment.app.Fragment;
  import android.speech.tts.TextToSpeech;
  import android.util.Log;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.Button;
  import java.util.Locale;
  import ch.yourclick.kitt.R;
  
  /**
   * A simple {@link Fragment} subclass.
   * Use the {@link GeneralFragment#newInstance} factory method to
   * create an instance of this fragment.
   */
  public class GeneralFragment extends Fragment {
      private TextToSpeech tts;
  
      public GeneralFragment() {
          // Required empty public constructor
      }
  
      /**
       * Use this factory method to create a new instance of
       * this fragment using the provided parameters.
       *
       * @return A new instance of fragment General.
       */
      // TODO: Rename and change types and number of parameters
      public static GeneralFragment newInstance() {
          GeneralFragment fragment = new GeneralFragment();
          Bundle args = new Bundle();
          fragment.setArguments(args);
          return fragment;
      }
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
      }
  
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
          // Inflate the layout for this fragment
          View view = inflater.inflate(R.layout.fragment_general, container, false);
          Button hello = view.findViewById(R.id.hello);
  
          // Text to speech
          tts = new TextToSpeech(getActivity(), new TextToSpeech.OnInitListener() {
              @Override
              public void onInit(int status) {
                  if (status == TextToSpeech.SUCCESS) { // &lt;-- I never get into that if statement
                      int result = tts.setLanguage(Locale.getDefault());
                      // Language is not supported
                      if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                          Log.e(&quot;TTS&quot;, &quot;Language not supported&quot;);
                      }
                  }
                  else {
                      Log.e(&quot;TTS&quot;, &quot;&quot; + status); // Returns -1
                      Log.e(&quot;TTS&quot;, &quot;&quot; + TextToSpeech.SUCCESS); // Returns 0
                  }
              }
          });
  
          hello.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  speak();
              }
          });
          return view;
      }
  
      /**
       * Speak
       */
      private void speak() {
          String text = &quot;Hello&quot;;
          tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
      }
  
      /**
       * Turn off
       */
      @Override
      public void onDestroy() {
          if (tts != null) {
              tts.stop();
              tts.shutdown();
          }
          super.onDestroy();
      }
  }
  </code></pre>
  <p>I get the message:</p>
  <blockquote>
  <p>W/TextToSpeech: speak failed: not bound to TTS engine</p>
  </blockquote>
  <p>My problem is that Text To Speech cannot be initialized:</p>
  <p><code>status</code> returns <em>-1</em> and <code>TextToSpeech.SUCCESS</code> returns <em>0</em>.</p>
  <p>I am using Android Studio and my virtual device is <em>Pixel 2 API 30</em>. So <em>Google Text-to-speech Engine</em> seems to be installed on it:</p>
  <p><a href="https://i.stack.imgur.com/zzYDW.png" rel="noreferrer"><img src="https://i.stack.imgur.com/zzYDW.png" alt="enter image description here" /></a></p>
  <p><em>Settings -&gt; Accessibility -&gt; Text-to-speech output</em></p>
  <p>If I click on <em>Play</em>, I hear a voice and so I know that it should not be a device issue. But why is it not working on my application? I do not get any errors on it.</p>
  <p>I have no idea what I am doing wrong. If you know the answer or have any advice on what it could be, please let me know!</p>