Я работаю над простым помощником, в основном, с помощью жесткого кодирования, на что он отвечает. У него есть кнопка, которая нажата, показывает намерение распознавателя голоса. но он не отображается сейчас при нажатии кнопки. Я прикрепил свой код здесь, пожалуйста, помогите мне найти ошибку, вызвав ошибку.Учет распознавания речи не открывается при нажатии кнопки
также, пожалуйста, помогите мне, как вызвать средство распознавания речи, не нажимая на кнопку, просто произнеся определенное слово, как в «Ok google».
MainActivity.java
package com.example.rv00485448.neha1;
import android.content.Intent;
import android.os.Build;
import android.speech.RecognizerIntent;
import android.speech.SpeechRecognizer;
import android.speech.tts.TextToSpeech;
import android.speech.tts.UtteranceProgressListener;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import java.util.ArrayList;
import java.util.Locale;
import static android.speech.RecognizerIntent.ACTION_RECOGNIZE_SPEECH;
public class MainActivity extends Activity{
private TextToSpeech tts;
private ArrayList<String> questions;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.microphoneButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listen();
}
});
loadQuestions();
tts = new TextToSpeech(MainActivity.this, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
int result = tts.setLanguage(Locale.US);
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("TTS", "This Language is not supported");
}
speak("Hello");
} else {
Log.e("TTS", "Initilization Failed!");
}
}
});
}
private void loadQuestions(){
questions = new ArrayList<>();
questions.clear();
questions.add("hi how are you");
questions.add("I am good. how are you feeling today?");
questions.add("Do you have vitals readings?");
questions.add("you seem to have fever. Do you want me to book an appointment with doctor nandan ");
questions.add("I have booked an appointment with doctor nandan at 5 PM");
questions.add("Thank you too");
}
private void listen(){
Intent i = new Intent(ACTION_RECOGNIZE_SPEECH);
i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
i.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
i.putExtra(RecognizerIntent.EXTRA_PROMPT, "Say something");
// speak("I am listening to you");
// try {
// startActivityForResult(i, 100);
// } catch (ActivityNotFoundException a) {
// Toast.makeText(MainActivity.this, "Your device doesn't support Speech Recognition", Toast.LENGTH_SHORT).show();
// }
}
@Override
public void onDestroy() {
if (tts != null) {
tts.stop();
tts.shutdown();
}
super.onDestroy();
}
private void speak(String text){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null, null);
}else{
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 100){
if (resultCode == RESULT_OK && null != data) {
ArrayList<String> res = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
String inSpeech = res.get(0);
recognition(inSpeech);
}
}
}
private void recognition(String text){
switch (text)
{
case "hello":
{
speak(questions.get(0));
break;
}
case "fine how about you":
{
speak(questions.get(1));
break;
}
case "feeling dizzy":
{
speak(questions.get(2));
break;
}
case "yeah":
{
speak(questions.get(3));
break;
}
case "yes":
{
speak(questions.get(4));
break;
}
case "thank you":
{
speak(questions.get(5));
break;
}
}
}
}