Questo è in realtà piuttosto semplice, con l'API di azioni vocale integrata è possibile farlo sia in modalità online che offline. Ecco una breve demo per voi,
prima richiesta all'utente di inserire qualche voce,
private void promptSpeechInput() {
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,
getString(R.string.speech_prompt));
try {
startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
} catch (ActivityNotFoundException a) {
Toast.makeText(getApplicationContext(),
getString(R.string.speech_not_supported),
Toast.LENGTH_SHORT).show();
}
}
Si aprirà la schermata di costruito in input vocale di Google e adotterà le input vocali. Ora, dopo un input vocale controllare il risultato e ottenere la voce in una stringa convertita,
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQ_CODE_SPEECH_INPUT: {
if (resultCode == RESULT_OK && null != data) {
ArrayList<String> result = data
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
// here the string converted from your voice
String converted_text = (result.get(0);
}
break;
}
}
}
Ora è possibile manipolare la stringa in qualsiasi modo si desidera o confrontarli con le stringhe di azione predefiniti per eseguire un'azione specifica e molti altri ....
UPDATE:
Per rendere l'applicazione funziona su dopo aver detto un comando specifico per esempio "OK Google", Basta definire una stringa statica denominata "OK Google" e confrontare ciascun input vocale con questa stringa predefinita. Se questo corrisponde alla stringa "OK Google", passa ai mondi successivi ed esegui le istruzioni. Ad esempio,
"OK Google parlano la l'ora attuale"
Qui è possibile confrontare le prime due parole "OK Google" se che soddisfa le vostre String mossa pre-definito per i prossimi parole che è "parla l'ora corrente". Per questo è possibile salvare un set di array contenenti i comandi come "parla l'ora corrente" pronuncerà l'ora.
Per renderlo più intelligente è possibile implementare un servizio in background e continuare ad ascoltare l'input vocale dell'utente.
PS: Non sono sicuro che sarebbe un modo efficiente ma è solo un altro approccio per farlo.
è il riconoscimento vocale come servizio che riduce la durata della batteria? puoi spiegare quello scenario? –