在Android中制作文本到语音包装器

在Android中制作文本到语音包装器,android,api,wrapper,text-to-speech,Android,Api,Wrapper,Text To Speech,我正在尝试为GoogleAndroid的文本到语音功能创建一个包装器类。但是,我很难找到方法让系统暂停,直到onInit函数完成。底部附有我根据此处发现的内容创建的解决方案: 然而,这个解决方案似乎不起作用。有没有想过为什么这可能不起作用,或者有什么好主意可以确保在我的onInit()调用之后发生任何Speak()调用 公共类SpeechSynth实现了OnInitListener { } 我已经能够让它通过构造函数传递一个文本字符串,然后在onInit()函数中播放它。但是,每次我需要让我的程

我正在尝试为GoogleAndroid的文本到语音功能创建一个包装器类。但是,我很难找到方法让系统暂停,直到onInit函数完成。底部附有我根据此处发现的内容创建的解决方案:

然而,这个解决方案似乎不起作用。有没有想过为什么这可能不起作用,或者有什么好主意可以确保在我的onInit()调用之后发生任何Speak()调用

公共类SpeechSynth实现了OnInitListener {

}


我已经能够让它通过构造函数传递一个文本字符串,然后在onInit()函数中播放它。但是,每次我需要让我的程序说一些不同的话时,我真的希望避免破坏和重新创建整个文本到语音引擎。

我建议您使用锁而不是就绪状态int。插入代码如下:

public int Speak( String text )
{
        if (waitForInitLock.isLocked())
        {
            try
            {
                waitForInitLock.tryLock(180, TimeUnit.SECONDS);
            }
            catch (InterruptedException e)
            {
                Log.e(D_LOG, "interruped");
            }
            //unlock it here so that it is never locked again
            waitForInitLock.unlock();
        }

    if( ready == 1 )
    {
        tts.speak(text, TextToSpeech.QUEUE_ADD, null);
        return 1;
    }
    else
    {
        return 0;
    }   
}

我建议您使用锁而不是就绪状态int。请按如下方式插入代码:

public int Speak( String text )
{
        if (waitForInitLock.isLocked())
        {
            try
            {
                waitForInitLock.tryLock(180, TimeUnit.SECONDS);
            }
            catch (InterruptedException e)
            {
                Log.e(D_LOG, "interruped");
            }
            //unlock it here so that it is never locked again
            waitForInitLock.unlock();
        }

    if( ready == 1 )
    {
        tts.speak(text, TextToSpeech.QUEUE_ADD, null);
        return 1;
    }
    else
    {
        return 0;
    }   
}