2012-02-24 11 views
1

私はTTSを非常に重く使用しています。それは正常に動作していますが、私はそれを微調整する必要があります。AndroidのTTSとシングルトン

私はすべての画面でTTSオブジェクトを使用していますが、これは良くありません。私は、TTSオブジェクトを(シングルトンのように)一度だけ作成して、自分のすべてのアクティビティで使用できることを願っています。ここで

は、これが機能するための基本コードです:

public class SimOuNaoActivity extends Activity implements OnInitListener{ 
    public TextToSpeech tts; 
     private int MY_DATA_CHECK_CODE = 0; 


     @Override 
     public void onCreate(Bundle savedInstanceState) { 

      super.onCreate(savedInstanceState); 
    Intent checkIntent = new Intent(); 
    checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
    startActivityForResult(checkIntent, MY_DATA_CHECK_CODE); 
    tts.speak("Testing 1,2,3", TextToSpeech.QUEUE_ADD, null); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == MY_DATA_CHECK_CODE) { 
     if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { 
      tts = new TextToSpeech(this, this); 
     } else { 
      // missing data, install it 
      Intent installIntent = new Intent(); 
      installIntent 
        .setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
      startActivity(installIntent); 
     } 
    } 

} 

@Override 
public void onInit(int status) { 
    if (status == TextToSpeech.SUCCESS) { 
     // Toast.LENGTH_LONG).show(); 
    } else if (status == TextToSpeech.ERROR) { 
     // Toast.LENGTH_LONG).show(); 
    } 
} 

@Override 
public void onDestroy() { 
    if (tts != null) { 
     tts.stop(); 
     tts.shutdown(); 
    } 
    super.onDestroy(); 
     System.gc(); 
    } 

    } 

すべての私の活動にTTSオブジェクトが利用可能なための正しいアプローチは何ですか? startActivityForResultなどのいくつかのメソッドを使用していることを覚えておいてください。この作業をうまく行うために何ができるかを知りたいと思います。

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

助けがありがとうございます!

ありがとうございます!

+1

TextToSpeechオブジェクトをシングルトンとして設定できない原因は何ですか?あなたのユースケースで行うべき賢明なことのように聞こえる。あなた自身のアプリケーションサブクラスでそれを簡単に設定して、すべてのアクティビティから簡単にアクセスできるようにするか、あるいはシンプルな基本アクティビティを作成して、TextToSpeechオブジェクトへの呼び出しをシングルトン/アプリケーションから委譲し、アクティビティはこれを拡張します。 –

+0

こんにちはMH、あなたの答えに感謝します。任意のサンプルコード?私はちょっとここにこだわっています= P –

+0

ここにコピー・ペースト・コードの代わりに[このほとんど同じトピック]を見てみることをお勧めします(http://stackoverflow.com/questions/8159749/global-tts-インアンドロイド)。シングルトンパターンを使用するTTSの別の実装は、[ここ](http://www.androidadb.com/source/and-bible-read-only/AndBible/src/net/bible/android/device/TextToSpeechController.java)で見つけることができます。 .html)。実際に[Singleton vs. Application](http://stackoverflow.com/questions/3826905/singletons-vs-application-context-in-android)の使用についてコンセンサスがないことに注意してください。私はその決定をあなたに任せます。がんばろう。 :) –

答えて

0

は、Androidでのよりよいデザインでの活動とプログラムの間のものを共有するために、ここで見てください: Intent.putExtras size limit?

0

あなたは可能性が高いだけとにかく一度インスタンス化することができるアプリケーションで、あなたのシングルトンオブジェクトをインスタンス化して保持することをお勧めしますTTS初期化コードを独自のクラスに置き、そのクラスをアプリケーションのオブジェクトとしてインスタンス化するだけです。 TTSがインスタンス化されるコンテキストとして、アプリケーションをTTSクラスに渡す必要があります。

public class MyApplication extends Application { 
    public MyTTS myTTS; 
    public void onCreate() { 
     myTTS = new MyTTS(this); 
    } 
} 

あなたがアプリケーションシングルトン-ified TTSのクラスにアクセスするための活動の中からgetApplication()。myTTS.whateverMethodsYouMake(yadayada)を使用することができます。