Как проверить, работает ли SpeechRecognizer в данный момент?

Я пытаюсь отследить состояние SpeechRecognizer, как это:

private SpeechRecognizer mInternalSpeechRecognizer;
private boolean mIsRecording;

public void startRecording(Intent intent) {
 mIsRecording = true;
 // ...
 mInternalSpeechRecognizer.startListening(intent);
}

Проблема с этим подходом mIsRecording Флаг до даты жестко, например, если есть ERROR_NO_MATCH ошибка должна быть установлена false или нет?
У меня сложилось впечатление, что некоторые устройства прекращают запись, а другие нет.

Я не вижу никакого метода, как SpeechRecognizer.isRecording(context), поэтому мне интересно, если есть способ сделать запрос через запущенные службы.

1 ответ

Одним из решений для обработки случаев конца или ошибки является установка RecognitionListener на ваш SpeechRecognizer пример. Вы должны сделать это перед звонком startListening()!

Пример:

mInternalSpeechRecognizer.setRecognitionListener(new RecognitionListener() {

    // Other methods implementation

    @Override
    public void onEndOfSpeech() {
        // Handle end of speech recognition
    }

    @Override
    public void onError(int error) {
        // Handle end of speech recognition and error
    }

    // Other methods implementation 
});

В вашем случае вы можете сделать свой класс, содержащий mIsRecording атрибут реализации RecognitionListener интерфейс. Затем вам просто нужно переопределить эти два метода с помощью следующей инструкции:

mIsRecording = false;

Кроме того, ваш mIsRecording = true инструкция находится не в том месте. ты должен сделать это в onReadyForSpeech(Bundle params) определение метода, в противном случае распознавание речи может никогда не начаться, пока это значение истинно.

Наконец, в классе, управляющем им, используйте методы create, например:

// Other RecognitionListener's methods implementation

@Override
public void onEndOfSpeech() {
    mIsRecording = false;
}

@Override
public void onError(int error) {
    mIsRecording = false;
    // Print error
}

@Override
void onReadyForSpeech (Bundle params) {
    mIsRecording = true;
}

public void startRecording(Intent intent) {
    // ...
    mInternalSpeechRecognizer.setRecognitionListener(this);
    mInternalSpeechRecognizer.startListening(intent);
}

public boolean recordingIsRunning() {
    return mIsRecording;
}

Будьте осторожны с безопасностью потоков при записи звонков Isrunning, и все будет хорошо:)

Другие вопросы по тегам