【发布时间】:2012-02-26 03:44:53
【问题描述】:
我正在这里开发一个非常简单的应用程序。这是给我脑瘫女儿的。这只是一个很大的“是”和“否”按钮,所以她可以在需要时按下它们。
嗯...我正在使用 SVOX Classic TTS 引擎。
在我的平板电脑升级到 ICS 之前,一切都很顺利。现在,每次我运行该应用程序时,它都会打开市场,要求我安装 TTS。我点击“返回”,然后我的应用程序会说话。 这很烦人。
以下是 Google API 的说明:
*在我们的 TextToSpeech 对象创建后,成功的检查将由 CHECK_VOICE_DATA_PASS 结果代码标记,表明该设备已准备好说话。如果没有,我们需要让用户知道安装设备成为多语种说话机所需的数据!下载和安装数据是通过触发 ACTION_INSTALL_TTS_DATA 意图来完成的,这会将用户带到 Android Market,并让她/他开始下载。下载完成后将自动安装数据。以下是您的 onActivityResult() 实现的示例:*
这是我的代码:
public class yesOunoActivity extends Activity implements OnInitListener{
ImageView yes;
ImageView no;
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 = new TextToSpeech(this, this);
setContentView(R.layout.yesorno);
yes = (ImageView) findViewById(R.id.yes);
no = (ImageView) findViewById(R.id.no);
yes.setClickable(true);
yes.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent arg1) {
if (arg1.getAction() == android.view.MotionEvent.ACTION_DOWN) {
tts.speak("yes!", TextToSpeech.QUEUE_ADD, null);
}
return true;
}
});
no.setClickable(true);
no.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent arg1) {
if (arg1.getAction() == android.view.MotionEvent.ACTION_DOWN) {
//Intent myIntent = new Intent(v.getContext(), ParametrosActivity.class);
tts.speak("no!", TextToSpeech.QUEUE_ADD, null);
}
return true;
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == MY_DATA_CHECK_CODE) {
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
// success, create the TTS instance
tts = new TextToSpeech(this, this);
} else {
// missing data, install it
//ATTENTION: BELOW THIS GIVES ME PROBLEMS SINCE IT OPENS MARKET
//AND I HAVE TO HIT THE BACK BUTTON, THEN, IT SPEAKS!
//BTW TTS ENGINE "IS" INSTALLED!!
Intent installIntent = new Intent();
installIntent
.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);
}
}
}
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
} else if (status == TextToSpeech.ERROR) {
}
}
@Override
public void onDestroy() {
if (tts != null) {
tts.stop();
tts.shutdown();
}
super.onDestroy();
System.gc();
}
}
如果我删除上面带有“注意”的区域(因为我确定我已经安装了 TTS),它会在我第一次运行应用程序时工作,如果我离开应用程序并再次打开它,它会显示 “说话失败:未绑定到 tts 引擎”
这就像它没有创建 TTS 对象,因为应用程序仍在内存中。
那么,伙计们……你们认为我应该怎么做?
这让我发疯了,我真的需要通过平板电脑与我的女儿交流!
感谢任何帮助!
【问题讨论】:
-
@Carols Pereira - 你能解决这个问题吗?一位用户报告说他们遇到了与您相同的问题,但是当我们在模拟器中对其进行测试时,它对我们来说效果很好。您是否能够确定此问题的根本原因?这是 svox 中的错误吗?
标签: android android-4.0-ice-cream-sandwich text-to-speech