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)
- ¿Cuál es la mejor manera de crear archivos temporales en Android?
- SwipeRefreshLayout activar programaticamente
- ¿Cuál es la diferencia entre esto y Actividad?
- Desvío de paquetes VPN
- "Necesita usar un tema Theme.Appcompat ..." al probar ActionBarActivity, pero estoy
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.
- ¿Cómo validar el formato y los valores de EditTextPreference introducidos en Android 2.1?
- Establezca BaseActivity con un constructor personalizado para suministrar datos de la clase secundaria
- ¿Cómo usar SQLiteOpenHelper sin el uso menos restrictivo de Contexto?
- Error: el paquete javax.annotation no existe después de la actualización a lombok 1.16.2
- Combinar dos imágenes en android java
- ¿Por qué hay flujos en la API HttpURLConnection?
- Implementar la aplicación de Android. Falta la tarea 'installReleaseDebug' para gradle
- Android obtener captura de pantalla de videoview actual
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.
- Java Singleton + clase interna mal entendida
- ImageView: escala imágenes demasiado grandes hacia abajo, no escala imágenes demasiado pequeñas