java - programacion - Cómo: Comandos de voz en una aplicación de Android
package id android (2)
Muy buen tutorial. Bien hecho.
Para completar un poco más:
Necesita agregar permiso a su manifiesto de la siguiente manera
<uses-permission android:name="android.permission.RECORD_AUDIO" />
También la voz no funciona si tienes
launchMode="singleInstance"
o launchMode="singleTask"
parece que debería ser "estándar"
Hay muchos tutoriales en línea para agregar reconocimiento de voz a una aplicación de Android. A menudo son confusos y los editores de la codificación nunca están disponibles para preguntas. Necesito un tutorial simple con una codificación completa para agregar reconocimiento de voz a mi aplicación.
Si desea agregar reconocimiento de voz a la aplicación de Android de su grupo, es muy simple.
A lo largo de este tutorial, necesitará agregar importaciones a medida que pegue el código.
- cree un archivo xml o use uno existente y asegúrese de agregar un botón y una vista de lista.
- en una clase Java, necesitas extender la actividad e implementar OnClickListener. Recibirás un error que dice que tienes métodos no implementados. Desplázate sobre ella y agrega los métodos no implementados. Añadiremos a esto más tarde.
Luego configura el botón y la vista de lista en tu java.
public ListView mList; public Button speakButton;
también agregue:
public static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;
Luego, crea un método OnCreate y configura el botón y el oyente.
speakButton = (Button) findViewById(R.id.btn_speak); speakButton.setOnClickListener(this);
también agregue este método (lo configuraremos a continuación)
voiceinputbuttons();
Recuerde establecerContentView para el xml que está mostrando.
Fuera de tu oncreate crea un nuevo método que se vea así.
public void voiceinputbuttons() { speakButton = (Button) findViewById(R.id.btn_speak); mList = (ListView) findViewById(R.id.list); }
Ahora tendrá que configurar su actividad de reconocimiento de voz usando el siguiente código.
public void startVoiceRecognitionActivity() { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo"); startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); }
Luego, dentro de su método onclick del paso 2, agregue la actividad del paso 6.
startVoiceRecognitionActivity();
A continuación, tendremos que configurar otro método. Copie y pegue el siguiente código.
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) { ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, matches));
coincidencias es el resultado de la entrada de voz. Es una lista de lo que posiblemente dijo el usuario. El uso de una declaración if para la palabra clave que desea usar permite el uso de cualquier actividad si las palabras clave coinciden, es posible configurar varias palabras clave para usar la misma actividad, de modo que más de una palabra permitirá al usuario Usar la actividad (lo hace tan el usuario no tiene que memorizar palabras de una lista) Para usar una actividad de la información de entrada de voz simplemente use el siguiente formato;
if (matches.contains("information")) { informationmenu(); }
NOTA: puede formatear el código en cualquier momento presionando ctrl + shift + F en eclipse.
Ahora vamos a configurar nuestro método utilizado por el código en el paso 8. Este código crea un intento de dirigir al usuario a un nuevo menú. Necesitarás otra clase xml y java para esto. Además, recuerde agregar una actividad a su manifiesto.
public void informationMenu() { startActivity(new Intent("android.intent.action.INFOSCREEN")); }
Finalmente, debe configurar algún código que le avise al usuario si el micrófono está operativo. Pegue este código dentro del método OnCreate al final.
// Check to see if a recognition activity is present // if running on AVD virtual device it will give this message. The mic // required only works on an actual android device PackageManager pm = getPackageManager(); List activities = pm.queryIntentActivities(new Intent( RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); if (activities.size() != 0) { voiceButton.setOnClickListener(this); } else { voiceButton.setEnabled(false); voiceButton.setText("Recognizer not present"); }
NOTA FINAL: el Reconocimiento de voz no funcionará en un emulador virtual porque no pueden acceder al micrófono en su computadora. El reconocimiento de voz solo funcionará con una conexión a Internet.
Esto es aprox. cómo debería ser tu código final en tu java.
package com.example.com.tutorialthread;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.speech.RecognizerIntent;
import android.support.v4.app.NavUtils;
public class main extends Activity implements OnClickListener {
public ListView mList;
public Button speakButton;
public static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
speakButton = (Button) findViewById(R.id.btn_speak);
speakButton.setOnClickListener(this);
voiceinputbuttons();
}
public void informationMenu() {
startActivity(new Intent("android.intent.action.INFOSCREEN"));
}
public void voiceinputbuttons() {
speakButton = (Button) findViewById(R.id.btn_speak);
mList = (ListView) findViewById(R.id.list);
}
public void startVoiceRecognitionActivity() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
"Speech recognition demo");
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
}
public void onClick(View v) {
// TODO Auto-generated method stub
startVoiceRecognitionActivity();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {
// Fill the list view with the strings the recognizer thought it
// could have heard
ArrayList matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
mList.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, matches));
// matches is the result of voice input. It is a list of what the
// user possibly said.
// Using an if statement for the keyword you want to use allows the
// use of any activity if keywords match
// it is possible to set up multiple keywords to use the same
// activity so more than one word will allow the user
// to use the activity (makes it so the user doesn''t have to
// memorize words from a list)
// to use an activity from the voice input information simply use
// the following format;
// if (matches.contains("keyword here") { startActivity(new
// Intent("name.of.manifest.ACTIVITY")
if (matches.contains("information")) {
informationMenu();
}
}
}