如何使用singleInstance启动模式从活动中正确启动语音识别活动



已经看到了另一个线程,其中提到如果从具有singleInstance启动模式的activity中启动具有RecognizerIntent的activity,则无法正常工作。所以我想知道我的选择是什么。

我的用例如下:我的应用程序监听一个事件,当这个事件发生时,它显示一个警告对话框,即使用户正在使用另一个应用程序。从其他问题中,我发现这样做的常见方法是用singleInstance启动模式启动一个活动。但是一旦这个警告对话框弹出,我需要使用RecognizerIntent做一些语音到文本的处理。然而,语音输入对话框只是不等待任何输入和onActivityResult()被立即调用。如果我的警报对话框从一个启动模式不是"singleInstance"的活动弹出,事情会很好。

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

试试这样运行你的代码:-

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上进行了测试,一旦你在列表视图中获得文本列表,它就可以很好地工作。

相关内容

  • 没有找到相关文章

最新更新