TextToSpeech不谈onTouch方法的android开发



我在创建活动时尝试使用texttospeech,但只有当我触摸视图时,以及onTouch称之为talk的方法时,代码如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_d);
    tts = new TextToSpeech(this, this);
    tts.setLanguage(Locale.US);
    tts.speak("Check Check", TextToSpeech.QUEUE_FLUSH, null);
    d = (LinearLayout) findViewById(R.id.d_layout);
    d.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            tts.speak("Check Check Check", TextToSpeech.QUEUE_FLUSH, null);
            return false;
        }
    });

}

只有当我触摸它说检查检查时,但当我开始活动时,它没有说检查检查,为什么以及如何修复它?

问题是在初始化TextToSpeech对象之前调用speak()。您需要侦听传递给TextToSpeech构造函数的侦听器的onInit()调用(请参见此处:http://developer.android.com/reference/android/speech/tts/TextToSpeech.OnInitListener.html)。

在语音引擎已经准备就绪的情况下,视图触摸很可能发生得足够晚。更具体地说,我怀疑事情发生的顺序如下:

  1. tts = new TextToSpeech(this,this)
  2. tts.speak("Check Check", TextToSpeech.QUEUE_FLUSH, null);(不起作用)
  3. (时间流逝)
  4. 调用CCD_ 9,指示CCD_
  5. (时间流逝)

  6. 用户触摸布局,调用tts.speak("Check Check Check", TextToSpeech.QUEUE_FLUSH, null);。(这是有效的)

正如您所看到的,只有onInit()调用之后的speak()调用才真正起作用。

相关内容

最新更新