2

已经看到了另一个thread其中提到与RecognizerIntent的活动,如果从singleInstance启动模式下的活动中推出的不正常工作。所以我想知道我的替代品是什么。如何使用singleInstance启动模式正确启动活动中的语音识别活动?

我的使用情况如下:我的应用程序侦听事件,当事件发生时,它会显示一个警告对话框,即使用户在使用其他应用程序之中。从其他questions我发现这样做的通用方式是使用singleInstance启动模式启动一个活动。但是现在一旦弹出此警报对话框,我需要使用RecognizerIntent并对文本处理进行一些演讲。然而,语音输入对话框不会等待任何输入,并立即调用onActivityResult()。如果我的警报对话框从具有“singleInstance”之外的启动模式的活动中弹出,情况会正常。

还有其他方法可以解决这个问题吗?

+0

这[解决方案](http://stackoverflow.com/questions/6316937/how-can-i-use-speech-recognition-without-the-annoying-dialog-in-android-phones)帮助我获得围绕上述问题。 – user492501 2011-12-29 17:29:26

回答

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()来编写,而下面应该写ouside它

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一旦你获得列表中的文本列表,就可以很好地工作,查看它,直到你想要选择。