Как правильно запустить действие распознавания голоса из действия в режиме запуска singleInstance? - PullRequest
2 голосов
/ 23 декабря 2011

Уже видел другой поток , в котором упоминается, что действие с RecognizerIntent не работало правильно, если оно было запущено изнутри действия с режимом запуска singleInstance. Поэтому я хотел бы знать, каковы мои альтернативы.

Мой вариант использования следующий: мое приложение прослушивает событие, и когда это событие происходит, оно отображает диалоговое окно с предупреждением, даже если пользователь находится в процессе использования другого приложения. Из других вопросов я обнаружил, что обычный способ сделать это - запустить действие в режиме запуска singleInstance. Но теперь, когда появляется это диалоговое окно с предупреждением, мне нужно использовать RecognizerIntent и выполнить некоторую речь для обработки текста. Однако диалог речевого ввода просто не ждет ввода, и onActivityResult () вызывается немедленно. Все работает хорошо, если мое диалоговое окно с предупреждением появляется из действия, которое имеет режим запуска, отличный от «singleInstance».

Есть ли другие способы решения этой проблемы?

1 Ответ

0 голосов
/ 24 февраля 2013

Попробуйте запустить ваш код следующим образом: -

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, и он отлично работает, как только вы получаете список текстов в своем списке, просматриваете его, который хотите выбрать.

...