Android reconocimiento de voz: startActivityForResult () no funciona

Todo lo que necesitas saber: Tengo un diálogo con un botón en él. Cuando se presiona el botón, quiero iniciar el reconocimiento de voz en MainActivity. (El diálogo es creado por otra clase, manejo los clics a través de una interfaz).

Así que aquí está el código relevante: (en MainActivity)

public void speechToText(boolean isName) { this.isName = isName; Intent intent = new Intent( RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault().toString()); //intent.putExtra(RecognizerIntent.EXTRA_PROMPT, getString(R.string.prompt)); try { startActivityForResult(intent, RESULT_SPEECH); Toast.makeText(getApplicationContext(), "started acitvity for result", //test toast Toast.LENGTH_SHORT).show(); } catch (ActivityNotFoundException a) { Toast.makeText(getApplicationContext(), getString(R.string.speech_to_text_not_supported), Toast.LENGTH_SHORT).show(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case RESULT_SPEECH: { if (resultCode == RESULT_OK && null != data) { ArrayList<String> text = data .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); if(isName) currentName = text.get(0); else currentDes = text.get(0); dialog.DialogNew(currentName, currentDes); } break; } } } 

Aquí está el problema: Normalmente aparece un diálogo para la entrada de voz. Pero de alguna manera este diálogo no aparecerá. Lo he probado, y muestra el "tostado de prueba" (véase más arriba), pero no hay error y no hay diálogo de entrada. ¿Pero por qué?

Edit: Finalmente podría probarlo en otro dispositivo y (finalmente) Tengo un error: el diálogo de google fue cerrado. Desde el protocolo, una excepción puntero nulo, así que supongo que debe haber algo mal con mi intención.

Creo que usted también necesita esto:

 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 

La documentación de Android lista esto en "Extras requeridos" para RecognizerIntent.

EDIT: Después de la experimentación, sin embargo, EXTRA_LANGUAGE_MODEL no es obligatorio en el intento, al contrario de la documentación. El reconocimiento funciona sin él, al menos en mi prueba …

Así que finalmente podría solucionar el problema:

En mi manifast:

 <activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden|screenSize" android:theme="@style/AppTheme" android:uiOptions="none" > android:launchMode="singleInstance"> <!--THIS WON'T WORK--> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

De alguna manera no puede utilizar singleInstance como modo de inicio de la actividad. Para mi propósito utilicé singleTask como una alternativa.

  • ¿Cómo combinar, crear etiquetas y poner un orden ascendente los feeds de más RSS Feed enlaces como en Yahoo Pipes?
  • Eliminar archivos a través de un 'ContentResolver' en lugar de eliminarlos a través de 'file.delete ()'
  • Error al transformar el archivo '45907c80e09917e1b776adf038505958' para que coincida con los atributos {artifactType = jar} usando transform AarTransform
  • ¿Cómo pasar de managedQuery a LoaderManager / CursorLoader?
  • Selector de color de Android para incluirlo en la actividad
  • Eventos VideoView onTouch: pausar / reanudar vídeo y mostrar / ocultar MediaController y ActionBar
  • Es la captura de una excepción específica menos costosa que la captura de un genérico?
  • ¿Cómo uso el ActionBar en las versiones anteriores de Android?
  • Agregar API de Google al proyecto existente de eclipse
  • ¿Cómo puedo crear un módulo de prueba de Android en IntelliJ 13 para un proyecto Android de Gradle?
  • Instalación del complemento Genymotion Eclipse
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.