2012-02-24 23 views
1

我使用TTS非常沉重的應用程序。它工作正常,但我需要調整它。TTS和辛格爾頓在Android的

我使用的每一個畫面TTS對象,這是不好的。我希望我可以創建一次TTS對象(就像一個Singleton)和他們,在我的所有活動中使用它。

這是基礎代碼,這個工作:

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

那麼,是什麼阻止您建立文字轉語音對象作爲一個Singleton?聽起來在你的用例中是一個明智的做法。你可能把它架在自己的應用程序子類可以輕鬆地從所有活動訪問它,或者更方便,建立某種形式的有關方法的基礎的活動,與會代表呼籲從辛格爾頓/應用的文字轉語音對象的,並有所有其他活動延伸了這個。 – 2012-02-24 23:20:26

+0

你好MH,謝謝你的回答。任何示例代碼?我還挺卡在這裏= P – 2012-02-25 00:13:26

+0

在這裏的複製粘貼代碼代替,我建議你看看[這幾乎是相同的話題(http://stackoverflow.com/questions/8159749/global-tts-在-機器人)。另一個使用Singleton模式的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)。我會把這個決定留給你。祝你好運。 :) – 2012-02-25 00:30:24

回答

0

您很可能希望實例,握住你的Singleton對象的應用程序,這隻能反正一次實例化,所以只需將您的TTS初始化代碼放入其自己的類中,並將該類實例化爲應用程序中的對象。您需要將應用程序傳遞到您的TTS類,因爲TTS將實例化的上下文。

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

然後你可以從使用getApplication()。myTTS.whateverMethodsYouMake(yadayada)內的活動來訪問應用程序辛格爾頓,指明分數TTS類。