2013-03-16 6 views
6

tôi cải thiện ứng dụng Android trong đó sử dụng lớp RecognitionListener để nghe giọng nói của người sử dụng, ở đây tôi nhận được bên dưới kết quả:Làm thế nào để khởi động lại nghe một lần nữa sau khi RecognitionListener mất ERROR_RECOGNIZER_BUSY lỗi

1-) Nếu người dùng nhấp chuột vào biểu tượng micro và nói điều gì đó mọi thứ đều tốt 2-) Nếu người dùng nhấp chuột vào biểu tượng micro và nhấp một lần nữa vào biểu tượng microphone hoặc không nói bất cứ điều gì, tôi nhận được onerror và loại lỗi là: ERROR_RECOGNIZER_BUSY

@Override 
public void onError(int error) { 
if ((error == SpeechRecognizer.ERROR_NO_MATCH) 
    || (error == SpeechRecognizer.ERROR_SPEECH_TIMEOUT)){ 

    } 
    else if(ERROR_RECOGNIZER_BUSY){ 
    } 

} 

đây là mã của tôi để bắt đầu danh sách ening:

public void recognizeSpeechDirectly() 
    { 


     recognizer = SpeechRecognizer.createSpeechRecognizer(this.context); 
     recognizer.setRecognitionListener(this); 
     recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
     recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "org.twodee.andytest"); 
     recognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true); 
     recognizer.startListening(recognizerIntent); 

    } 

Tôi muốn khởi động lại nghe khi ERROR_RECOGNIZER_BUSY xuất hiện,

anh chàng khác nói về lỗi này trên stackoverflow nhưng nó không phải là rõ ràng đối với tôi và không thể thực hiện nó.

How to handle ERROR_RECOGNIZER_BUSY

Cảm ơn trước

Trả lời

0

Bạn có ERROR_RECOGNIZER_BUSY vì bạn gọi startListening hai lần khi người dùng nhấp vào nút và nhấp chuột một lần nữa. Thay đổi mã của bạn như sau:

// class member 
private boolean mIsListening; 
@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    ......... 
    recognizer = SpeechRecognizer.createSpeechRecognizer(this.context); 
    recognizer.setRecognitionListener(this); 
    recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "org.twodee.andytest"); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true); 
} 

Và khi biểu tượng được nhấp

if (!mIslistening) 
{ 
    mIsListening = true;   
    recognizer.startListening(recognizerIntent); 
} 

@Override 
public void onError(int error) { 
if ((error == SpeechRecognizer.ERROR_NO_MATCH) 
    || (error == SpeechRecognizer.ERROR_SPEECH_TIMEOUT)){ 

    } 
    else if(ERROR_RECOGNIZER_BUSY){ 

    } 
    recognizer.startListening(recognizerIntent); 
} 

@Override 
    public void onPartialResults(Bundle partialResults) 
    { 
     mIsListening = false; 
     .......... 
    } 

@Override 
    public void onResults(Bundle results) 
    { 
     mIsListening = false; 
      .......... 
    } 
+1

Cảm ơn trả lời Hoàn nhưng khi tôi hủy recongnizer và khởi động lại nghe trong ** if (ERROR_RECOGNIZER_BUSY) **, thay vì khởi động lại nghe lỗi tương tự lặp lại trong vòng lặp vô hạn. – odincer

+0

Tôi đã chỉnh sửa câu trả lời của mình. –

+0

Hi Hoan, tôi chắc chắn đã áp dụng những gì bạn nói nhưng nó không hiệu quả với tôi, bạn có làm mẫu gì không? Máy của tôi là Samsung S3 với Android 4.1 bằng cách này. – odincer

0

bắt đầu công nhận của bạn với: recognizeSpeechDirectly();

public void stopRecognition(){ 
     recognizer.destroy(); 
     recognizer = null; 

} 

public void onError(int error) { 
     stopRecognition(); 
} 

public void onResults(Bundle results){ 
     //Do something 
     stopRecognition(); 
} 

Nó hoạt động để sửa chữa "không kết nối với dịch vụ nhận dạng""ERROR_RECOGNIZER_BUSY" lỗi