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) { ArrayListlista = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); textView.setText(lista.get(0)); } } }
Nessun commento:
Posta un commento