How to hide toast message “Your audio will be sent to google to provide speech recognition service.” in Android?

前端 未结 2 609
南方客
南方客 2021-02-04 18:10

I am using google speech recognizer for integrating voice services in Android but while pressing on mic button this annoying toast message is showing. Please suggest me a way to

2条回答
  •  既然无缘
    2021-02-04 19:02

    You can make a custom speech recogniser which will give you more control over the UI. MainActivity opens a new DialogFragment which implements RecognitionListener .

    public class MainActivity extends AppCompatActivity implements VoiceRecognizerInterface {
        Button button ;
        TextView textView;
        String string;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            button = findViewById(R.id.button);
            textView = findViewById(R.id.textView);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    FragmentManager fragmentManager = getSupportFragmentManager();
                    if (fragmentManager != null && fragmentManager.findFragmentByTag("dialogVoiceRecognizer") == null && !isFinishing()) {
                        VoiceRecognizerDialogFragment languageDialogFragment = new VoiceRecognizerDialogFragment(MainActivity.this,MainActivity.this);
                        languageDialogFragment.show(fragmentManager, "dialogVoiceRecognizer");
                    }
                }
            });
        }
    
        @Override
        public void spokenText(String spokenText) {
            textView.setText(spokenText);
        }
    }
    

    An interface to signal the main activity after stt.

    public interface VoiceRecognizerInterface {
        void spokenText(String spokenText);
    }
    

    The custom SpeechToText Dialog.

    public class VoiceRecognizerDialogFragment extends DialogFragment implements RecognitionListener{
    
        ImageView micImage;
        TextView stateTV;
        TextView displayTV;
    
        private SpeechRecognizer mSpeechRecognizer;
        private Intent mSpeechRecognizerIntent;
        private Context context;
        VoiceRecognizerInterface signal;
    
        @SuppressLint("ValidFragment")
        public VoiceRecognizerDialogFragment(Context context, VoiceRecognizerInterface signal) {
            this.context = context;
            this.signal = signal;
        }
    
        public VoiceRecognizerDialogFragment(){
    
        }
    
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.voice_recognizer_custom_layout ,container, false );
    
            //Mic tap to listen again
            micImage = view.findViewById(R.id.micImageView);
            //Displays Listening.. when recognizer is listening
            stateTV = view.findViewById(R.id.stateTV);
            //Displays message if error
            displayTV = view.findViewById(R.id.displayTV);
    
            mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(context);
            mSpeechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
            mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                    RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
            //Customize language by passing language code
            mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE,"en");
            //To receive partial results on the callback
            mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS,true);
            mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
                    context.getPackageName());
            mSpeechRecognizer.setRecognitionListener(this);
            mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
            micImage.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    startListening();
                }
            });
            return view;
    
        }
    
        public void startListening(){
            mSpeechRecognizer.setRecognitionListener(this);
            mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
            changeUIStateToListening();
        }
    
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            if (mSpeechRecognizer != null) {
                mSpeechRecognizer.destroy();
            }
        }
    
        @Override
        public void onBeginningOfSpeech()
        {
        }
    
        @Override
        public void onBufferReceived(byte[] buffer)
        {
    
        }
    
        @Override
        public void onEndOfSpeech()
        {
        }
    
        @Override
        public void onError(int error)
        {
            if(error == 7){
               changeUIStateToRetry();
            }
        }
    
        @Override
        public void onEvent(int eventType, Bundle params)
        {
    
        }
    
        @Override
        public void onPartialResults(Bundle partialResults) {
        }
    
        @Override
        public void onReadyForSpeech(Bundle params)
        {
    
        }
    
        @Override
        public void onResults(Bundle results)
        {
            ArrayList matches = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
            if(matches == null){
                return;
            }
            int i =0;
            String first ="";
            for(String s : matches){
                if(i==0){
                    first = s;
                }
                i++;
            }
            // sending text to MainActivity using Interface
            signal.spokenText(first);
            this.dismiss();
        }
    
        @Override
        public void onRmsChanged(float rmsdB)
        {
        }
    
        public void changeUIStateToListening(){
            displayTV.setText("Tell us what you need");
            stateTV.setText("Listening...");
        }
    
        public void changeUIStateToRetry(){
            displayTV.setText("Didn't catch that. Try\nSpeaking again");
            stateTV.setText("Tap on mic to try again");
        }
    }
    

提交回复
热议问题