2012-08-26 13 views
2

我正在制作一个简单的Android程序,用于训练目的运行助记符或数学练习。 我有一个“新练习”按钮,可以改变问题和答案。我想实现一个“文本到语音”模式,在这个模式下,软件读取问题和答案。在他们说完之后,它应该计算一个新的问题并重新开始。如何访问TTS OnUtteranceCompleted回调中的布局?

我正在使用OnUtterance完成来确定演讲是否已结束。我的问题是,我无法从回调中访问我的“新练习”按钮。

我使用这个:

private TextToSpeech.OnUtteranceCompletedListener onUtteranceCompleted = new TextToSpeech.OnUtteranceCompletedListener() 
{ 
     @Override 
     public void onUtteranceCompleted(String utteranceId) 
     { 
       if(0 == utteranceId.compareToIgnoreCase(END_OF_SPEECH)) 
       { 
         Log.i("TTS","Completed"); 
         if (TTSMode == TTS_MODE_ON) { 
          //Start new 
          Log.i("TTS","TTS mode is on: start new exercize"); 
          NewExercize(); 
          btnNewEx.performClick(); 

         } 
       } 

     } 
}; 

我得到了以下错误: $ CalledFromWrongThreadException:只有创建视图层次可以触摸其观点原来的线程。

我能够生成新的问题/答案,但我不能使用按钮来更改新问题或答案的字段,TTS引擎使用这些字段。

任何想法?

回答

3

您需要使用runOnUiThread

context.runOnUiThread(new Runnable() { 
    public void run() { 
     btnNewEx.performClick(); 
    } 
}); 

(你可以省略 “背景。” 如果 “这” 是一种活动或服务子类)

+0

完美!非常感谢你 – DavidTonarini