Roohi Zuwairiyah
Roohi Zuwairiyah

Reputation: 363

speech recognition intent not opening on button click

I am working on a simple assistant app intially by hardcoding what it replies. It has a button which on clicked shows up the voice recognizer intent. but it is not showing up now on button click. I have attached my code here please help me to find the mistake causing the error.

also please help me how to invoke the speech recognizer without tapping on the button, by just saying some specified word as in '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;
            }

        }
    }
}

Upvotes: 0

Views: 572

Answers (2)

mayur newase
mayur newase

Reputation: 66

you are not triggering that activity.

use startActivityForResult(i) inside listen method.

Upvotes: 1

Patel Jaymin
Patel Jaymin

Reputation: 251

You need to add INTERNET permission in your manifest file

Upvotes: 0

Related Questions