2013-07-08 15 views
6

私はサードパーティの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+)

答えて

0

、あなたはAndroidManifest.xmlとでandroid:anyDensity=falseを持っている場合あなたはICSの電話機で有効にGPUレンダリングを余儀なくされています。これはネイティブのAndroidアプリにとっても問題です。 オプションはandroid:anyDensity=falseオプションを使用しないか、電話機で強制的にGPUレンダリングを無効にすることです。後者を他の人の電話で実際に制御することはできないので、前者は最善の解決策のようです。 「dp」という接尾辞をすべてdimensionsに使用することを忘れないでください。

+0

どうすれば問題が解決するか説明してください。 –

関連する問題