2012-02-25 9 views
2

生きて死んでいない私は以下のコードを取り、それが正常に動作し、他の活動にTTSオブジェクトを共有する:共有TTSは何も活動した後の作業は再び

 package com.simekadam.blindguardian; 

      import android.content.Context; 
import android.speech.tts.TextToSpeech; 
import android.speech.tts.TextToSpeech.OnInitListener; 

public class SpeechHelper implements OnInitListener { 

private static TextToSpeech mTts; 
private String text; 
private static final SpeechHelper helper = new SpeechHelper(); 

public static SpeechHelper getInstance(){ 

    return helper; 
} 


public void say(String text, Context context){ 

    if(mTts == null){ 
     this.text = text; 
     mTts = new TextToSpeech(context, (OnInitListener) helper); 

    } 
    else{ 
     mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null); 
    } 
} 


@Override 
public void onInit(int status) { 
    // TODO Auto-generated method stub 
    if (status == TextToSpeech.SUCCESS) { 
     mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null); 
    } 
} 

public void stopTTS(){ 
    if(mTts != null){ 
     mTts.shutdown(); 
     mTts.stop(); 
     mTts = null; 
    } 
} 

} 

しかし、私は活動を離れ、その後、私が来た場合にそれに戻って、私のアプリは単にもう話しません。エラーはありません。もう話しません。

誰でも助けてくれますか?

ありがとうございます!私はこの問題を解決するために何を作ることができる

「デッドスレッドでハンドラにメッセージを送る」

は、私はちょうどEclipseでの私のメッセージに次のメッセージを見ましたか? =)

+0

mTts = new TextToSpeech(context.getApplicationContext(), (OnInitListener) helper); 
...そのアクティビティのonResume()の中にそれを置きます。 – MKJParekh

+0

Hello Soni、あなたの答えをありがとう。 onResume()に入れるべきコードは何ですか?上のリンクにはたくさんのコードがあります! = ^)私は使用しているコードを正確に含めるように編集しました。 –

答えて

1

このエラーは、現在のアクティビティの代わりにアプリケーションコンテキストを使用している場合は表示されません。たとえば、次のコードアクティビティ 意図checkIntentのonCreate` 'に書き込まれる

+0

ほとんどの回答では、サービスとしてのTTSHelperと他の複雑なアーキテクチャが実装されています。実際にはアプリケーションコンテキストに切り替えると意味があり、機能します。ありがとう@aleb – Sriram

関連する問題