0

Я работаю над простым помощником, в основном, с помощью жесткого кодирования, на что он отвечает. У него есть кнопка, которая нажата, показывает намерение распознавателя голоса. но он не отображается сейчас при нажатии кнопки. Я прикрепил свой код здесь, пожалуйста, помогите мне найти ошибку, вызвав ошибку.Учет распознавания речи не открывается при нажатии кнопки

также, пожалуйста, помогите мне, как вызвать средство распознавания речи, не нажимая на кнопку, просто произнеся определенное слово, как в «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; 
      } 

     } 
    } 
} 

ответ

1

вы не вызывает эту деятельность.

использование стартActivityForResult (i) внутри слушать метод.

0

Вам нужно добавить разрешение INTERNET в вашем файле манифеста