我想按顺序进行一些Speech to Text调用,我试试
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);
...
但我认为onActivityResult
函数被称为异步。我该如何解决?
答案 0 :(得分:1)
您可以轻松地从语音识别中抽象出来,并专注于并行编程。你想要做的只是开始一个活动并等待它的结果。这个问题已在这里多次询问,您可以通过搜索找到讨论,例如检查
Synchronous startActivityForResult - Waiting for Activity to Complete
简而言之,您应该避免在等待活动结果时阻止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);
}
了解如何进行基于回调的编程,这很容易。