Я пытаюсь создать класс-оболочку для функции преобразования текста в речь Google Android. Однако у меня возникли проблемы с поиском способа приостановить работу системы до тех пор, пока функция onInit не завершится. Внизу прикреплено что-то вроде решения, которое я создал на основе того, что нашел здесь: Речь Android — как вы можете читать текст в Android?
Однако это решение, похоже, не работает. Любые мысли о том, почему это может не работать, или что было бы хорошей идеей, чтобы убедиться, что любые вызовы Speak() происходят после моего вызова onInit()?
открытый класс SpeechSynth реализует OnInitListener {
private TextToSpeech tts;
static final int TTS_CHECK_CODE = 0;
private int ready = 0;
private ReentrantLock waitForInitLock = new ReentrantLock();
SpeechSynth( Activity screen )
{
ready = 0;
tts = new TextToSpeech( screen, this );
waitForInitLock.lock();
}
public void onInit(int status)
{
if (status == TextToSpeech.SUCCESS)
{
ready = 1;
}
waitForInitLock.unlock();
}
public int Speak( String text )
{
if( ready == 1 )
{
tts.speak(text, TextToSpeech.QUEUE_ADD, null);
return 1;
}
else
{
return 0;
}
}
}
Мне удалось сделать так, чтобы я мог передать строку текста через конструктор, а затем воспроизвести ее в функции onInit(). Тем не менее, мне бы очень хотелось избежать необходимости уничтожать и воссоздавать весь механизм преобразования текста в речь каждый раз, когда мне нужно, чтобы моя программа говорила что-то другое.