¿Cómo puedo implementar Google Voice Typing en mi aplicación?
Estoy tratando de agregar un botón en mi aplicación que inicia Google Voice Typing (o el reconocimiento de voz predeterminado). He intentado seguir este tutorial . Este tutorial es increíblemente confuso para mí. Importé el archivo .jar y agregé los permisos, servicios y actividades necesarios a mi Manifiesto. Pero no puedo imaginar cómo "ponerlo todo junto". Me pregunto:
- ¿Se supone que debo llamar a inputMethodService desde mi botón de clic en mi actividad principal? ¿O mi inputMethodService se convierte esencialmente en mi actividad principal?
- ¿Qué significa IME? Traté de Google, pero las definiciones que me dio no ayudó a mi comprensión.
- Cuando intento copiar y pegar el código completo de DemoInputMethodService en mi actividad actual, consigo un error que dice que no puedo extender InputMethodService dentro de esta actividad. (Lo que lleva de nuevo a hacer la primera pregunta.)
¿Cómo puedo conseguir que esto funcione?
- Android mismo método llamado dos veces
- Convertir JSONArray a Array de cadenas
- Manteniendo la cámara en pausa
- Problema de configuración de mockito con eclipse. Da error: java.lang.verifyError
- JSON.stringify en java - android
- IntelliJ Idea dando java.lang.OutOfMemoryError: Error de espacio de montón de Java incluso después de aumentar el tamaño de montón
- Error de descifrado en Android 4.4
- Mi aplicación se bloquea, ¿cómo implementar Threads en ella?
- No se puede configurar LocalContainerEntityManagerFactoryBean desde @EntityScan, asegúrese de que un bean apropiado esté registrado
- ¿Qué sucede con un hilo de Android después de destruir la actividad que lo creó?
- ¿Qué sucede cuando mi actividad se destruye cuando estoy usando IntentService con ResultReceiver
- Obtener un inflador de diseño desde el ApplicationContext
- ¿Cuál es la mejor manera de declarar en el componente de la interfaz de usuario en android con Kotlin?
Si desea seguir el tutorial que menciona, entonces necesita implementar un IME (editor de métodos de entrada) primero, consulte http://developer.android.com/guide/topics/text/creating-input-method.html
Este IME puede tener una apariencia de teclado normal o contener sólo un botón de micrófono.
El usuario de su aplicación primero tendrá que hacer clic en un campo de texto para iniciar el IME. (Tenga en cuenta que puede haber varios IME instalados en el dispositivo y deben estar explícitamente habilitados en los ajustes.) Entonces el usuario tendrá que hacer clic en el botón del micrófono para activar el reconocimiento de voz.
El tutorial proporciona un tarro que le permite llamar directamente al reconocedor de Google. Sería mejor si en lugar de eso llamaste al reconocedor a través de la interfaz de SpeechRecognizer ( http://developer.android.com/reference/android/speech/SpeechRecognizer.html ), de esta manera el usuario puede decidir si usa Google o algo más .
SpeechRecognizer
recibe un listener que soporta el método onPartialResults , que le permite monitorear las hipótesis de reconocimiento mientras el usuario está hablando. Depende de usted cómo se muestran. Tenga en cuenta, sin embargo, que la especificación de SpeechRecognizer
no promete que este método se llama. Esto depende de la implementación del servicio de reconocimiento. Respecto a la implementación de Google: lo que admite cambia sin previo aviso, no tiene una API pública ni siquiera notas de lanzamiento.
Es posible que pueda volver a utilizar mi proyecto Kõnele ( http://kaljurand.github.io/K6nele/about/ ), que contiene dos implementaciones de SpeechRecognizer
y un IME que las utiliza. Una de las implementaciones ofrece un reconocimiento continuo de la entrada de audio arbitrariamente larga, utilizando el servidor Kaldi GStreamer ( https://github.com/alumae/kaldi-gstreamer-server ). Debería configurar su propia instancia del servidor que lo lleve al idioma que desee reconocer (a menos que desee utilizar el servidor estonio que Kõnele utiliza de forma predeterminada).
Se encuentran muestras de reconocimiento de voz en las que tiene el SDK de Android.
ejemplo:
$ find $SDK_ROOT/samples -name *recogni* ./android-19/legacy/VoiceRecognitionService/res/xml/recognizer.xml ./android-19/legacy/VoiceRecognitionService/src/com/example/android/voicerecognitionservice ./android-19/legacy/ApiDemos/res/layout/voice_recognition.xml ./android-18/legacy/VoiceRecognitionService/res/xml/recognizer.xml ./android-18/legacy/VoiceRecognitionService/src/com/example/android/voicerecognitionservice ./android-18/legacy/ApiDemos/res/layout/voice_recognition.xml ./android-21/legacy/VoiceRecognitionService/res/xml/recognizer.xml ./android-21/legacy/VoiceRecognitionService/src/com/example/android/voicerecognitionservice ./android-21/legacy/ApiDemos/res/layout/voice_recognition.xml
Cualquiera de los servicios debe ayudar a mostrar cómo hacer un RecognizerIntent
El "APIDemo" parece incluir el uso de un RecognizerIntent. Comprobar la fuente para que uno. De lo contrario mirar en los servicios y tallarlos en una intención.
Tuve el mismo problema, pero después de mucho tiempo buscando dictado de voz continua en una actividad, he resuelto ese problema usando pocketsphinx .
No pude encontrar la forma de integrar Google Voice Typing en una actividad, solo en un método de entrada siguiendo ese tutorial . Si te confunde, simplemente descarga esta demo y modifica. ¡Buena suerte!
Puede activar una intención desde un oyente de botones
Intent checkIntent = new Intent(); checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
Y el resultado puede obtenerse de
private TextToSpeech mTts; protected void onActivityResult( int requestCode, int resultCode, Intent data) { if (requestCode == MY_DATA_CHECK_CODE) { if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { // success, create the TTS instance mTts = new TextToSpeech(this, this); } else { // missing data, install it Intent installIntent = new Intent(); installIntent.setAction( TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); startActivity(installIntent); } } }
Consulte este enlace para obtener más información.
- OnGlobalLayout diferenciar entre varias invocaciones
- ¿Qué teléfonos Android tienen tamaños de pantalla grande