已经看到另一个thread,它提到如果从具有singleInstance启动模式的活动中启动,则具有RecognizerIntent的活动无法正常工作。所以我想知道我的替代品是什么。
我的用例如下:我的应用程序侦听事件,当发生此事件时,即使用户正在使用其他应用程序,它也会显示警告对话框。从其他questions我发现,这样做的常见方法是使用singleInstance启动模式启动活动。但是现在一旦弹出这个警告对话框,我需要使用RecognizerIntent并对文本处理做一些演讲。但是,语音输入对话框不会等待任何输入,并立即调用onActivityResult()。如果我的警报对话框从具有“singleInstance”以外的启动模式的活动中弹出,则工作正常。
还有其他方法可以解决这个问题吗?
答案 0 :(得分:0)
尝试以这种方式运行您的代码: -
List<ResolveInfo> activities = pm.queryIntentActivities(
new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if (activities.size() != 0) {
speakButton.setOnClickListener(this);
} else {
speakButton.setEnabled(false);
speakButton.setText("Recognizer not present");
}
上面的代码应该写在onCreate()里面,而下面的代码应写在外面
public void onClick(View v) {
if (v.getId() == R.id.btn_speak) {
startVoiceRecognitionActivity();
}
}
private void startVoiceRecognitionActivity() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo");
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
//Run a loop checking whether the list is empty or not:-
while(activities.isEmpty()){
//wait
}
//Now run your alert dialog box
}
我已经在DellXCD35 android 2.3.3上进行了测试,一旦你获得列表中的文本列表,它就可以很好地运行,直到你想要选择它为止。