#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. Я попробовал то же самое, но все еще не видел этого сообщения.