TTS и Singleton в Android - PullRequest
       6

TTS и Singleton в Android

1 голос
/ 25 февраля 2012

У меня есть приложение, использующее TTS очень сильно. Работает нормально, но мне нужно его настроить.

Я использую объект 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 и т. Д., Поэтому ... я хотел бы знать, что я могу сделать, чтобы эта работа работала нормально.

Кто-нибудь может мне помочь, пожалуйста?

Любая помощь приветствуется!

Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 февраля 2012

Вы, вероятно, захотите создать экземпляр приложения Singleton и сохранить его в Приложении, которое в любом случае может быть создано только один раз, поэтому просто поместите свой код инициализации TTS в собственный класс и создайте экземпляр этого класса как объект в своем Приложении , Вам нужно будет передать Приложение вашему классу TTS в качестве контекста, с которым будет создан экземпляр TTS.

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

тогда вы можете использовать getApplication (). MyTTS.whwhatMethodsYouMake (yadayada) изнутри Activity для доступа к классу TTS Application-Singleton-ified.

0 голосов
/ 25 февраля 2012

Посмотрите здесь, чтобы поделиться информацией о мероприятиях и программах с более приятным дизайном в Android: Ограничение размера Intent.putExtras?

...