Я пытаюсь создать класс-оболочку для функциональности Text-To-Speech от Google Android. Однако у меня возникли проблемы с поиском способа приостановить работу системы до тех пор, пока функция onInit не завершится. Приложенное внизу - это то решение, которое я создал на основе того, что я нашел здесь: Android speech - how can you read text in 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(). Тем не менее, мне бы очень хотелось избежать необходимости уничтожать и воссоздавать весь механизм преобразования текста в речь каждый раз, когда мне нужно, чтобы моя программа говорила что-то другое.