我使用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等...所以...我想知道我能做些什麼來使這工作正常。
誰能幫助我,好嗎?
任何幫助被讚賞!
謝謝!
那麼,是什麼阻止您建立文字轉語音對象作爲一個Singleton?聽起來在你的用例中是一個明智的做法。你可能把它架在自己的應用程序子類可以輕鬆地從所有活動訪問它,或者更方便,建立某種形式的有關方法的基礎的活動,與會代表呼籲從辛格爾頓/應用的文字轉語音對象的,並有所有其他活動延伸了這個。 – 2012-02-24 23:20:26
你好MH,謝謝你的回答。任何示例代碼?我還挺卡在這裏= P – 2012-02-25 00:13:26
在這裏的複製粘貼代碼代替,我建議你看看[這幾乎是相同的話題(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