私はサードパーティのttsを使用している、fliteという名前のアプリケーションを開発しています。私はttsが文を話すような何かをしています。私はそれが話されるごとに各単語を強調したい。このために、私はttsからの単語レベルのコールバックを取得することができました。 ワークフローはこのようなものです - "speak text"ボタンが押されています。これはtt のサービスを開始し、次にC言語で書かれたflite ttsにテキストを送信し、アプリケーションと結合されました。 Cコードから、すべての単語の後に、2つの異なるJavaアクティビティに2つのコールバックを行います。 単語をハイライトするために、単語 を第2のテスト用のJavaアクティビティに向けて発声します。 テストアクティビティで単語レベルのコールバックを正常に取得していますが、その後はUI作業を行うことができません。アンドロイドrunonuithread()関数が実行されていません
以下は、コールバックを取得したときに実行するコードです。 これはCコードから呼び出される関数です。
private void WordCallback(int isword) {// from
// callback
if (isword == -1) {
Log.d(LOG_TAG, "its not a word");
} else if (isword == -2) {
Log.d(LOG_TAG, "yeah..its the end");
} else {
Log.d(LOG_TAG, "its word no " + isword);
int word = isword;
Log.d(LOG_TAG, "highlightwords");
highlightwords(isword);
if (isword == 4) {
Log.d(LOG_TAG, "in if");
new Thread(new Runnable() {
@Override
public void run() {
Log.d(LOG_TAG, "thread started");
try {
Flitetest.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d(LOG_TAG, "run on ui");
textview.setText("#" + isword);
}
});
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
}
FliteTestはアクティビティの名前です。 ログは「スレッド開始」まで印刷されますが、runonuithread()内のコードは決して実行されず、エラーもありません。 )スレッドとrunonuithread(なしtextview.settext("something")
を書く場合
はまた、それはエラーを与える:
fatal signal 11(sigsegv) at 0x6fc64e87(code=1), thread 20292(SynthThread)
。
その動作の理由は何ですか? AndroidのICS (4.0+)
で
どうすれば問題が解決するか説明してください。 –