如果直接从onCreate调用,Android TextToSpeech不起作用

时间:2018-04-28 10:44:54

标签: android text-to-speech oncreate

当按下按钮时,这是一个测试活动textToSpeech工作正常,但是当调用函数playString()时,它不会工作,从此TestActivity的onCreate()调用playString()。

public class TestActivity  extends Activity {
    TextToSpeech textToSpeech;
    EditText editText;
    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        editText=(EditText)findViewById(R.id.editText);
        button=(Button)findViewById(R.id.button);

        textToSpeech=new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {
                if(status != TextToSpeech.ERROR) {
                    textToSpeech.setLanguage(Locale.UK);
                }
            }
        });

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String sentence = "Testing String";
                textToSpeech.speak(sentence, TextToSpeech.QUEUE_FLUSH, null);
            }
        });
        playString();
    }

    public void playString(){
        String sentence = "Testing String";
        textToSpeech.speak(sentence, TextToSpeech.QUEUE_FLUSH, null);
    }

    public void onPause(){
        if(textToSpeech !=null){
            textToSpeech.stop();
            textToSpeech.shutdown();
        }
        super.onPause();
    }
}

2 个答案:

答案 0 :(得分:2)

来自documentation

  

TextToSpeech实例只能在完成初始化后用于合成文本。

初始化可能需要很长时间(在我的设备上需要约30秒),因此您不能使用具有一些随机延迟的处理程序。
相反,您可以在playString()之后的onInit块中放置textToSpeech.setLanguage(Locale.UK);,因此在可以播放时会播放字符串。

答案 1 :(得分:-1)

请使用oncreate方法中的以下代码来调用texttospeech:

 textToSpeech = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
        @Override
        public void onInit(int status) {
            if (status != TextToSpeech.ERROR) {
                textToSpeech.setLanguage(Locale.UK);
            }
        }
    });


    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            //Do something after 100ms

            String sentence = "Testing String";
            textToSpeech.speak(sentence, TextToSpeech.QUEUE_FLUSH, null);
        }
    }, 500);