我正试图跟踪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)
这样的方法,所以我想知道是否有办法通过运行服务进行查询。
答案 0 :(得分:-2)
处理结束或错误情况的一种解决方案是将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)
方法定义中执行此操作,否则,当此值为true时,语音识别可能永远不会启动。
最后,在管理它的类中,juste创建方法,如:
// 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;
}
注意使用recordingIsRunning调用的线程安全性,一切都会好的:)