voz talking studio reconocimiento libreria funciona conexión java android voice-recognition

java - talking - Aplicación de reconocimiento de voz de Android sin Pop Up



reconocimiento de voz xamarin (4)

Ha pasado mucho tiempo desde el post. Aún para aquellos que están buscando, el código anterior proporcionado por Hoan está casi completo, pero falta una línea importante. Tanto en la pregunta como en la respuesta y no estoy seguro de cómo podría funcionar sin eso.

Debe crear el SpeechRecognitionListener y configurarlo como un oyente para el SpeechRecognizer. También debe hacerse antes de que hagamos una llamada al método startListening () del SpeechRecognizer.

SpeechRecognitionListener listener = new SpeechRecognitionListener (); mSpeechRecognizer.setRecognitionListener (listener);

Luego, también debe eliminar la escucha del evento onError.

Actualmente estoy buscando una carrera con JAVA y he decidido comenzar por construir una aplicación. Tengo este código aquí mismo que estoy usando para activar el reconocimiento de voz.

public class MainActivity extends Activity implements OnClickListener{ private static final int VR_REQUEST = 999; private ListView wordList; private final String LOG_TAG = "SpeechRepeatActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button speechBtn = (Button) findViewById(R.id.speech_btn); wordList = (ListView) findViewById (R.id.word_list); PackageManager packManager= getPackageManager(); List<ResolveInfo> intActivities = packManager.queryIntentActivities (new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); if (intActivities.size() !=0){ speechBtn.setOnClickListener(this); } else { speechBtn.setEnabled(false); Toast.makeText(this,"Oops - Speech Recognition Not Supported!", Toast.LENGTH_LONG).show(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void onClick(View v){ if (v.getId() == R.id.speech_btn) { listenToSpeech(); } } private void listenToSpeech() { //start the speech recognition intent passing required data Intent listenIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); //indicate package listenIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getClass().getPackage().getName()); //message to display while listening listenIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Say a word!"); //set speech model listenIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); //specify number of results to retrieve listenIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 10); //start listening startActivityForResult(listenIntent, VR_REQUEST); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { //check speech recognition result if (requestCode == VR_REQUEST && resultCode == RESULT_OK) { //store the returned word list as an ArrayList ArrayList<String> suggestedWords = data. getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); //set the retrieved list to display in the ListView //using an ArrayAdapter wordList.setAdapter(new ArrayAdapter<String> (this, R.layout.word, suggestedWords)); } //this detects which one the user clicks wordList.setOnItemClickListener(new OnItemClickListener(){ //click listener for items within list public void onItemClick(AdapterView<?> parent, View view, int position, long id){ //cast the TextView wordView = (TextView) //retrive the chosen word String wordChosen= (String) wordView. //output for debugging Log.v(LOG_TAG, "chosen:" +wordChosen); }}); super.onActivityResult(requestCode, resultCode, data); } }

En esta aplicación, el usuario presiona un botón y se muestra con la pantalla de entrada de voz de Google, donde puede hacer clic en un botón (en realidad se activa automáticamente) y puede hablar, se detendrá y lo mostrará. Sin embargo, no quiero que esa ventana se abra. En su lugar, simplemente deje que el usuario haga clic en el botón y pueda hablar y deje que la aplicación se detenga y muestre el texto automáticamente (ya lo hace).

¡POR FAVOR! Entiendo que ya hay respuestas en el formulario que muestran cómo hacerlo, de hecho, un nombre de usuario JEEZ publicó algún código aquí .

No sé si entendí dónde poner esto en mi archivo de proyecto. ¡SOY UN NOOB! Si alguien pudiera ayudar a aclarar esto, GRANDEMENTE apreciaría su ayuda.

Aquí está mi código:

package com.example.speechrecognizertest; import android.os.Bundle; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.speech.RecognitionListener; import android.speech.RecognizerIntent; import android.speech.SpeechRecognizer; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.Toast; import android.widget.TextView; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { private static final int VR_REQUEST = 999; public static final String TAG = null; private ListView wordList; private final String LOG_TAG = "SpeechRepeatActivity"; private SpeechRecognizer mSpeechRecognizer; private Intent mSpeechRecognizerIntent; private boolean mIslistening; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button speechBtn = (Button) findViewById(R.id.speech_btn); wordList = (ListView) findViewById(R.id.word_list); PackageManager packManager = getPackageManager(); List<ResolveInfo> intActivities = packManager.queryIntentActivities( new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this); mSpeechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, this.getPackageName()); if (!mIslistening) { mSpeechRecognizer.startListening(mSpeechRecognizerIntent); } else { speechBtn.setEnabled(false); Toast.makeText(this, "Oops - Speech Recognition Not Supported!", Toast.LENGTH_LONG).show(); } } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } protected class SpeechRecognitionListener implements RecognitionListener { @Override public void onBeginningOfSpeech() { //Log.d(TAG, "onBeginingOfSpeech"); } @Override public void onBufferReceived(byte[] buffer) { } @Override public void onEndOfSpeech() { //Log.d(TAG, "onEndOfSpeech"); } @Override public void onError(int error) { mSpeechRecognizer.startListening(mSpeechRecognizerIntent); //Log.d(TAG, "error = " + error); } @Override public void onEvent(int eventType, Bundle params) { } @Override public void onPartialResults(Bundle partialResults) { } @Override public void onReadyForSpeech(Bundle params) { Log.d(TAG, "OnReadyForSpeech"); //$NON-NLS-1$ } @Override public void onResults(Bundle results) { //Log.d(TAG, "onResults"); //$NON-NLS-1$ ArrayList<String> suggestedWords = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); // matches are the return values of speech recognition engine // Use these values for whatever you wish to do wordList.setAdapter(new ArrayAdapter<String>(this, R.layout.word, suggestedWords)); } @Override public void onRmsChanged(float rmsdB) { } }


No se olvide de agregar el permiso de los siguientes:

<uses-permission android:name="android.permission.RECORD_AUDIO" />


También me encontré con ese problema. Parece que tener startActivityForResult(...) habilitará el micrófono emergente, luego puede manejar la respuesta en onActivityResult() . Sin embargo, simplemente agregando que startActivityForResult arruinó mi startListening(mSpeechRecognizerIntent) , por lo que es posible que deba hacer más ajustes.

mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, this.getPackageName()); startActivityForResult(recognizerIntent, 100); // call back onActivityResult(int requestCode, int resultCode, Intent data){...}


AndroidManifest.xml

Agregue el siguiente permiso:

<uses-permission android:name="android.permission.RECORD_AUDIO" />

miembros de la clase

private SpeechRecognizer mSpeechRecognizer; private Intent mSpeechRecognizerIntent; private boolean mIslistening;

En onCreate

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ......... ......... mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this); mSpeechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, this.getPackageName()); SpeechRecognitionListener listener = new SpeechRecognitionListener(); mSpeechRecognizer.setRecognitionListener(listener); }

en su botón de escucha simplemente use este código

if (!mIsListening) { mSpeechRecognizer.startListening(mSpeechRecognizerIntent); }

En onDestroy

if (mSpeechRecognizer != null) { mSpeechRecognizer.destroy(); }

Dentro de tu actividad crea la clase interior.

protected class SpeechRecognitionListener implements RecognitionListener { @Override public void onBeginningOfSpeech() { //Log.d(TAG, "onBeginingOfSpeech"); } @Override public void onBufferReceived(byte[] buffer) { } @Override public void onEndOfSpeech() { //Log.d(TAG, "onEndOfSpeech"); } @Override public void onError(int error) { mSpeechRecognizer.startListening(mSpeechRecognizerIntent); //Log.d(TAG, "error = " + error); } @Override public void onEvent(int eventType, Bundle params) { } @Override public void onPartialResults(Bundle partialResults) { } @Override public void onReadyForSpeech(Bundle params) { Log.d(TAG, "onReadyForSpeech"); //$NON-NLS-1$ } @Override public void onResults(Bundle results) { //Log.d(TAG, "onResults"); //$NON-NLS-1$ ArrayList<String> matches = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); // matches are the return values of speech recognition engine // Use these values for whatever you wish to do } @Override public void onRmsChanged(float rmsdB) { } }

EDICIÓN 2015-02-07: código incorporado de las respuestas a esta pregunta de ZakiMak y Born To Win en el código de esta respuesta para que sea más completo.