【问题标题】:How to access layout in TTS OnUtteranceCompleted callback?如何在 TTS OnUtteranceCompleted 回调中访问布局?
【发布时间】:2012-08-26 23:37:29
【问题描述】:

我正在制作一个简单的 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 引擎会使用这些字段。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    你需要使用runOnUiThread:

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

    (如果“this”是 Activity 或 Service 子类,则可以省略“context”)

    【讨论】:

      猜你喜欢
      • 2011-06-06
      • 2013-03-21
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      • 1970-01-01
      相关资源
      最近更新 更多