如何在TTS OnUtteranceCompleted回调中访问布局?

时间:2012-08-26 23:37:30

标签: android text-to-speech class-hierarchy

我正在制作一个简单的Android程序,可以运行助记符或数学练习来进行培训。 我有一个“新练习”按钮,可以改变问题和答案。我想实现“文本到语音”模式,其中软件读取问题和答案。在他们说完之后,它应该计算一个新问题并重新开始。

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

我正在使用它:

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引擎使用的新问题或答案的字段。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您需要使用runOnUiThread

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

(如果“this”是活动或服务子类,则可以省略“context。”)