Is there a way to use the SpeechRecognizer API directly for speech input?

前端 未结 5 1889
隐瞒了意图╮
隐瞒了意图╮ 2020-11-30 01:42

The Android Dev website provides an example of doing speech input using the built-in Google Speech Input Activity. The activity displays a pre-configured pop-up with the mi

5条回答
  •  时光说笑
    2020-11-30 01:43

    package com.android.example.speechtxt;
    
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.core.content.ContextCompat;
    
    import android.Manifest;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.net.Uri;
    import android.os.Build;
    import android.os.Bundle;
    import android.provider.Settings;
    import android.speech.RecognitionListener;
    import android.speech.RecognizerIntent;
    import android.speech.SpeechRecognizer;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.RelativeLayout;
    import android.widget.Toast;
    
    import java.util.ArrayList;
    import java.util.Locale;
    
    public class MainActivity extends AppCompatActivity {
    
        private RelativeLayout relativeLayout;
        private SpeechRecognizer speechRecognizer;
        private Intent speechintent;
        String keeper="";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            checkVoiceCommandPermission();
            relativeLayout = findViewById(R.id.touchscr);
    
            speechRecognizer = SpeechRecognizer.createSpeechRecognizer(getApplicationContext());
            speechintent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
            speechintent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
            speechintent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
    
    
            speechRecognizer.setRecognitionListener(new RecognitionListener() {
                @Override
                public void onReadyForSpeech(Bundle params) {
    
                }
    
                @Override
                public void onBeginningOfSpeech() {
    
                }
    
                @Override
                public void onRmsChanged(float rmsdB) {
    
                }
    
                @Override
                public void onBufferReceived(byte[] buffer) {
    
                }
    
                @Override
                public void onEndOfSpeech() {
    
                }
    
                @Override
                public void onError(int error) {
    
                }
    
                @Override
                public void onResults(Bundle results)
                {
                    ArrayList speakedStringArray = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
                    if(speakedStringArray!=null)
                    {
                        keeper = speakedStringArray.get(0);
    
                        Toast.makeText(getApplicationContext(),""+keeper,Toast.LENGTH_SHORT).show();
                    }
                }
    
                @Override
                public void onPartialResults(Bundle partialResults) {
    
                }
    
                @Override
                public void onEvent(int eventType, Bundle params) {
    
                }
            });
    
            relativeLayout.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch (event.getAction())
                    {
                        case MotionEvent.ACTION_DOWN:
                            speechRecognizer.startListening(speechintent);
                            keeper="";
                            break;
                        case MotionEvent.ACTION_UP:
                            speechRecognizer.stopListening();
                            break;
                    }
                    return false;
                }
            });
        }
    
    
        private void checkVoiceCommandPermission()
        {
            if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M)
            {
                if (!(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.RECORD_AUDIO)== PackageManager.PERMISSION_GRANTED))
                {
                    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:" +getPackageName()));
                    startActivity(intent);
                    finish();
                }
    
            }
        }
    }
    

提交回复
热议问题