2

トレーニング目的でニーモニックや数学の演習を実行する簡単な 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 エンジンで使用される新しい質問または回答でフィールドを変更することはできません。

何か案は?

4

1 に答える 1

3

使用する必要がありますrunOnUiThread

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

(「this」がアクティビティまたはサービスのサブクラスの場合、「context.」は省略できます)

于 2012-08-26T23:42:18.417 に答える