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

你是不是觸發該活動。

使用startActivityForResult(i)裏面的listen方法。

0

您需要添加INTERNET權限清單檔案中的