RecognitionListener игнорируется

#java #android

Вопрос:

В фоновом режиме моего приложения я хотел бы использовать распознавание речи. Цель состоит в том, чтобы сказать «Привет, приложение», и приложение должно слушать то, что я говорю, и возвращать строку. Так что в основном то же самое, что и Google Assistant.

Поэтому, чтобы запустить это приложение в фоновом режиме, я создал этот класс обслуживания:

 import android.app.Service; import android.content.Intent; import android.os.Bundle; import android.os.IBinder; import android.speech.RecognitionListener; import android.speech.RecognizerIntent; import android.speech.SpeechRecognizer;  import androidx.annotation.Nullable;  public class SttService extends Service {   @Override  public int onStartCommand(Intent intent, int flags, int startId) {  System.out.println("I am running!");   SpeechRecognizer mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);  mSpeechRecognizer.setRecognitionListener(new SttListener());   Intent mSpeechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);  mSpeechRecognizerIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);  mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, this.getPackageName());  startActivity(mSpeechRecognizerIntent);   return START_STICKY;  }   @Nullable  @Override  public IBinder onBind(Intent intent) {  System.out.println("A sign");  return null;  }   protected class SttListener implements RecognitionListener {  @Override  public void onReadyForSpeech(Bundle params) {  System.out.println("A sign");  }   @Override  public void onBeginningOfSpeech() {  System.out.println("A sign");  }   @Override  public void onRmsChanged(float rmsdB) {  System.out.println("A sign");  }   @Override  public void onBufferReceived(byte[] buffer) {  System.out.println("A sign");  }   @Override  public void onEndOfSpeech() {  System.out.println("A sign");  }   @Override  public void onError(int error) {  System.out.println("A sign");  }   @Override  public void onResults(Bundle results) {  System.out.println("A sign");  }   @Override  public void onPartialResults(Bundle partialResults) {  System.out.println("A sign");  }   @Override  public void onEvent(int eventType, Bundle params) {  System.out.println("A sign");  }  } }  

Итак, я вижу, что служба запущена, так как я получаю сообщение «Я запускаю!» но больше ничего не происходит. Так что в этом случае мое намерение и мой класс SttListener ничего не делают.

Что не так с моим кодом?

Ответ №1:

Попробуйте внедрить RecognitionListener в свой сервис с помощью

 public class SttService extends Service implements RecognitionListener   

и переопределить необходимые методы. А затем установите RecognitionListener на свой сервис;

 mSpeechRecognizer.setRecognitionListener(this);  

Вы увидите сообщение «Знак» из вашей системы.

Комментарии:

1. Я попробовал то же самое, но все еще не видел этого сообщения.