如何在android上进行多个同步语音识别调用



我想按顺序进行一些语音到文本的调用,我尝试

for (int i = 0; i < 3; i++) {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, getString(R.string.set_names));
intent.putExtra("index", i);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivityForResult(intent, REQUEST_CODE);
}

并在函数中捕获结果:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
Intent intent = getIntent();
final int index = intent.getIntExtra("index", 0);
...

但我认为CCD_ 1函数被称为异步函数。我该如何解决?

您可以在这里轻松地从语音识别中抽象出来,只关注并行编程。你所想做的只是开始一项活动,等待它的结果。这个问题在这里已经被问了很多次了,你可以通过搜索找到讨论,例如检查

同步启动ActivityForResult-等待活动完成

简而言之,您应该避免在等待活动结果时阻塞UI线程。这只会阻塞应用程序的UI,它将被关闭。相反,您应该在onActivityResult回调中继续处理。所以你的代码应该是这样的:

startRecognition() {
runRecognitionStep(0);
}
runRecognitionStep(int index) {
intent.putExtra("index", index);
startActivityForResult(intent, REQUEST_CODE);
}
onActivityResult() {
int i = intent.getExtra("index");
processResult();
if (i < 3)
runRecognitionStep(i + 1);
}

学习如何进行基于回调的编程,非常简单。

相关内容

  • 没有找到相关文章

最新更新