Как проверить, работает ли 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, и все будет хорошо:)