2016-04-26 14 views
5

Sto utilizzando l'API di Google per il riconoscimento vocale, ma voglio limitare il tempo di ascolto. Ad esempio due secondi. Dopo due secondi, anche se l'utente continua a parlare, il riconoscitore dovrebbe interrompere l'ascolto. Ho provato alcuni extra comeAndroid - Limite di tempo per l'ascolto vocale Riconoscimento

EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS

ma non mi ha aiutato. Il mio codice completo è qui, se qualcuno mi può aiutare, sarò apprezzo

public void promptSpeechInput() 
{ 
    //This intent recognize the peech 
    Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    i.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); 
    i.putExtra(RecognizerIntent.EXTRA_PROMPT, "Say Something"); 

    try { 
     startActivityForResult(i, 100); 
    } 
    catch (ActivityNotFoundException a) 
    { 
     Toast.makeText(MainActivity.this,"Your device does not support",Toast.LENGTH_LONG).show(); 
    } 
} 

//For receiving speech input 
public void onActivityResult(int request_code, int result_code, Intent i) 
{ 
    super.onActivityResult(request_code, result_code, i); 

    switch (request_code) 
    { 
     case 100: if(result_code == RESULT_OK && i != null) 
     { 
      ArrayList<String> result = i.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
      resultTEXT.setText(result.get(0)); 
     } 
      break; 
    } 
} 

risposta

2

Non è possibile limitare il tempo che il sistema di riconoscimento è in ascolto. Basta impostare il tempo minimo che deve ascoltare prima di chiudere, ma non quello massimo.

Ho cercato una soluzione anche per questo problema, quindi spero che forse ne trovi uno migliore. Ho trovato questo post da un altro compagno di StackOverflow:

SpeechRecognizer Time Limit

Lì, ha propongono la successiva possibilità di risolvere il problema:

La cosa migliore sarebbe quella di infilare una sorta di timer, qualcosa di simile un CountDownTimer:

yourSpeechListener.startListening(yourRecognizerIntent); 
new CountDownTimer(2000, 1000) { 

public void onTick(long millisUntilFinished) { 
    //do nothing, just let it tick 
} 

public void onFinish() { 
    yourSpeechListener.stopListening(); 
} }.start(); 

In altro modo, per rendere il vostro SpeechRecognition breve, yo u possibile aggiungere il parametro accanto al tuo intento: EXTRA_PARTIAL_RESULTS

Questo vi permetterà di ottenere risultati parziali dal SpeechRecognizer, il che significa che il vostro Methor onActivityPartialResult tornerà un altro array con il valore partite. Questo metodo viene chiamato prima onActivityResults e il suo più veloce, ma ovviamente non è preciso come onActivityResult. Questo ti aiuterà solo se il tuo ascoltatore sta cercando una parola specifica.

Spero che questo ti aiuti un po 'con la tua app!

Buona fortuna!

+0

Grazie Francisco, ci proverò – ysfcyln

Problemi correlati