"Eu tenho tanto pra lhe falar, mas com palavras ~é difícil escrever~".
Com esta pequena "brincadeirinha" começo este post expondo uma dificuldade presente em diferentes devices e circunstâncias.
Escrever no device, muitas vezes é muito complicado e dependendo para o que você está escrevendo é pior ainda. Por exemplo, quando você precisa buscar um contato em sua lista telefonica enquanto dirige(não faça isso ok?! ;P), ou então escrever um texto no Hangout enquanto anda de onibus nessas maravilhosas ruas brasileiras... enfim... em diferentes casos, escrever algo enquanto o mundo em sua volta exige sua atenção é muito complicado.
O Google, sabendo dessa dificuldade, criou uma maneira simples e prática para resolvermos este problema. Só é preciso falar e o device irá entender e, então, transpor o mesmo em texto. Essa mágica acontece pela classe RecognizeIntent.
Agora sim, podemos somente falar e a "mágica" irá acontecer.
Vamos entender como funciona?
Explicando a RecognizeIntent
A RecognizeIntent é uma Intent onde é possível termos acesso a ferramenta de Speech do Android. Só precisamos disparar uma intent RecognizerIntent.ACTION_RECOGNIZE_SPEECH e uma tela irá se abrir para que o usuário fale.
Depois disso, será retornado uma lista de palavras/frases ordenado pelo nível de maior probabilidade para a menor de similaridade ao que foi falado.
Algumas propriedades que podem ser passadas pelo "intent.putExtra(...)":
- RecognizerIntent.EXTRA_LANGUAGE_MODEL - Através dele você pode informar qual a lingua que deverá ser trabalhada. Por default é o "en-US" porém é possível informar "pt-BR" por exemplo. Caso você queira deixar que o próprio Android decida qual língua está sendo dita, você irá passar o valor "RecognizerIntent.LANGUAGE_MODEL_FREE_FORM";
- RecognizerIntent.EXTRA_PROMPT - Aqui é possível passar um pequeno texto para ser apresentado junto a tela de Speech, algo que possa auxiliar o usuário na hora de falar o que precisa ser dito.
No código abaixo podemos ver como é chamado a Intent e depois como pegamos a lista de possíveis resultados.
Obs: A tela tem um botão na parte superior e abaixo uma lista onde serão apresentados a lista de possíveis resultados.
Segue o código comentado:
public class MainActivity extends Activity {
private static final int RESULT_SPEECH = 1234;
private ImageButton btnSpeak;
private ListView listText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSpeak = (ImageButton) findViewById(R.id.btnSpeak);
listText = (ListView) findViewById(R.id.listText);
//Verifica se existe a RecognizerIntent.ACTION_RECOGNIZE_SPEECH na vesão do Device
//Caso não exista, desabilitamos o botão e evitamos uma ActivityNotFoundException
if (getPackageManager().queryIntentActivities(
new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0).size() > 0) {
btnSpeak.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Criamos a intent
Intent intent = new Intent(
RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
//Informamos que a linguagem será automática
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
//Passamos o texto de auxílio ao usuário
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
"Fale que eu te escuto Tutorial");
//Chama a Activity passando o código identificador de result
startActivityForResult(intent, RESULT_SPEECH);
}
});
} else {
btnSpeak.setEnabled(false);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//Verifica se o retorno é da nossa Intent
if (requestCode == RESULT_SPEECH && resultCode == RESULT_OK && null != data) {
//Passa a lista de possíveis resultados e passa para a lista de Textos por um Adapter genérico
ArrayList listResults = data
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
listText.setAdapter(new ArrayAdapter(this,
android.R.layout.simple_list_item_1, listResults));
}
}
}
Alguns prints da App de exemplo funcionando:
Conclusão
Bem, podemos ver como é simples utilizarmos algo que é tão poderoso.
Usando esta ferramenta, podemos aumentar muito o poder das nossas apps e facilitar muito a vida de nossos usuários.
Use e abuse por que é 0800! hehe
Qualquer dúvida ou comentários, por favor, só escrever na parte de comentários.
Bons estudos.
[]~



Nenhum comentário:
Postar um comentário