Tutorial di riferimento
Come si aggiunge questa funzione? Ho capito che è per mezzo di intent...
Si tratta di un intent implicito con un onActivityResult.
Ecco il codice:
Intent intent=new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,"Non supportato");
startActivityForResult(intent,100);
Come parametro, dunque, di intent, va messo RecognizerIntent.ACTION_RECOGNIZE_SPEECH.Possiamo usare, mnemonicamente, qualche artifizio: L'oggetto fondamentale è RecognizerIntent, ossia, l'intent del riconoscimento (vocale). Questo ha poi tanti membri (costanti? Funzioni?): Innanzitutto il primo, essendo un'ACTION, inizia senz'altro con ACTION.
A quest action segue una spiegazione di che tipo di action sia, ed è ovvio che la spiegazione è "riconoscimento vocale"; ossia, pari pari, RECOGNIZE_SPEECH. "Azione riconosci la voce".
Poi ci sono semplicemente tre putExtra.
Il primo è "quello del MODEL". Si vede la parola EXTRA che non ho capito che significato abbia, quindi il secondo è sempre MODEL, ma si aggiunge FREE_FORM. Anche il secondo putExtra ha un EXTRA_LANGUAGE, che stavolta non è MODEL.
Segue un Locale.getDefault().
E quindi al terzo putExtra c'è un EXTRA_PROMPT, seguito dalla frase che vogliamo porre nel prompt per la vocalizzazione.
Proviamo ad andare a memoria. Sembra che l'artifizio mnemonico abbia funzionato.
Ora vediamo l'onActivityResult.
Si ottiene un ArrayList<String>
Essa viene trovata mediante il comando "ottieni una ArrayList di String extra, che ha per parametro RecognizerIntent.EXTRA_RESULTS. L'extra c'entra sempre, ma stavolta essendo necessari i risultati segue la parola RESULTS.
Proviamo ad andare a memoria...
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK) {
ArrayList<String> lista = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
}
}
Vediamo se funziona...Sembra proprio di sì, considerando il rumore di fondo.
Ecco il codice completo:
public class MainActivity extends AppCompatActivity {
Button button;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.button);
textView=(TextView)findViewById(R.id.textView);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Intent intent=new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,"Parla pure");
startActivityForResult(intent,0);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK) {
ArrayList lista = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
textView.setText(lista.get(0));
}
}
}
Nessun commento:
Posta un commento