Android text to speech app
First of all better use clear variable names.
Coming from android I can guess what an 'ed' is. But for everybody it is always better to name it properly like :
private EditText editText;
editText = findViewById(R.id.editText);

or in this case maybe even
editTextTTS;

or something similar.
Same with myTTS, I personally would also name that :
private TextToSpeech textToSpeech;

You are creating a TextToSpeech Object on every click, which is absolutely unneccessary, create it once when starting the application, and reuse it. So this piece of code belongs in your onCreate() not your onClick() :
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, 1);

That way the TTS will be ready before the user can click the button and is only initialised once.
You are getting the value of your editText AFTER you startActivityForResult().
This does not seem to be the logical order, although if you remove the code above from your onClick(), that also solves this problem.
You have a magic number 1 in your startActivityForResult() method, better use a final value with a proper name like :
private final int TTS_REQUEST_CODE = 1;

makes this also look way better :
startActivityForResult(checkIntent, TTS_REQUEST_CODE);

if (requestCode == TTS_REQUEST_CODE) 

In case the application becomes larger and more complex this will be way more secure and readable since the value is final and cannot be tampered with.
There is no information to the user wether the TextToSpeech is installed and ready or not, I would suggest showing a Toast or a Snackbar to let the user know what is happening, especially in case of
status == TextToSpeech.ERROR

You might even want to smooth exit the application in this case.
This app will only please Users with US English language. Why not make it get the Locale from the Users device, to set the proper language dynamically :
myTTS.setLanguage(Locale.getDefault());

The onInit() method should only be called once when initialising the TTS Object, so your
myTTS.speak(phrase, TextToSpeech.QUEUE_FLUSH, null);

is misplaced there. This code should go into your onClick() method along with a check that the editText is not empty :
public void onClick(View arg0) {

    final String phrase = ed.getText().toString();
    if(!phrase.isEmpty()) {
        myTTS.speak(phrase, TextToSpeech.QUEUE_FLUSH, null);
    } else {
        // Toast or Snackbar to tell the user Edittext is empty
    }

This will also convert
private String phrase;

to a local final variable, which is always better than having an unneccessary global variable.