我在创建活动时尝试使用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)。
在语音引擎已经准备就绪的情况下,视图触摸很可能发生得足够晚。更具体地说,我怀疑事情发生的顺序如下:
tts = new TextToSpeech(this,this)
tts.speak("Check Check", TextToSpeech.QUEUE_FLUSH, null);
(不起作用)- (时间流逝)
- 调用CCD_ 9,指示CCD_
-
(时间流逝)
-
用户触摸布局,调用
tts.speak("Check Check Check", TextToSpeech.QUEUE_FLUSH, null);
。(这是有效的)
正如您所看到的,只有onInit()
调用之后的speak()
调用才真正起作用。