我创建了一些TTS Manager,因为我想在其他类中使用someTTsObject.speak("some string")
。
这是我的经理课程:
public class TtsManager
{
private TextToSpeech myTTS;
private Context context;
public TtsManager(Context baseContext)
{
this.context = baseContext;
initOrInstallTts();
}
public void initOrInstallTts()
{
myTTS = new TextToSpeech(context, new OnInitListener()
{
public void onInit(int status)
{
if (status == TextToSpeech.SUCCESS)
{
myTTS.setLanguage(Locale.US);
}
else
installTts();
}
});
}
private void installTts()
{
Intent installIntent = new Intent();
installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
context.startActivity(installIntent);
}
public void speak(String text)
{
myTTS.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
}
这是我的主要课程,我想用它:
public class main extends Activity {
TtsManager tts;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tts = new TtsManager(this);
tts.speak("Welcome in my app");
}
}
当我运行编译时,我在LogCat上看到:
08-30 17:25:52.531: I/TTS received:(2782): Welcome in my app
但我没有听到任何文字。我在虚拟机和手机上测试了它。
为什么这不起作用? 干杯!
答案 0 :(得分:0)
好的,问题是您不会等到系统回调来告诉您TTS已初始化。在使用SUCCESS值调用onInit之前,不能调用speak。
答案 1 :(得分:0)
问题是你在没有初始化tts引擎的情况下调用speak函数.... 加 的 tts.initOrInstallTts(); 强> 后 tts = new TtsManager(this);
像:
public class main extends Activity {
TtsManager tts;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tts = new TtsManager(this);
tts.initOrInstallTts();
tts.speak("Welcome in my app");
}
}