0

私は簡単なアシスタントアプリケーションをintiallyにハードコーディングして応答しています。それには、音声認識装置の意図をクリックして表示されるボタンがあります。ボタンクリックでは表示されません。私はここに私のコードを添付してエラーを引き起こす間違いを見つけるのを助けてください。音声認識の意図がボタンでクリックされないようにする

また、「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

をINTERNET権限を追加する必要があります。

startActivityForResult(i)の内部でリッスンメソッドを使用します。

0

あなたがその活動をトリガしていないマニフェストファイルに