Comando de voz de cristal partido más cercano de la lista dada

Con Glass puede iniciar una aplicación a través del menú ‘OK, Glass’ y parece elegir la coincidencia más cercana a menos que un comando esté a millas de distancia, y obviamente puede ver la lista de comandos.
De todos modos, hay desde la aplicación o desde el aviso de voz (después del desencadenador de la aplicación inicial) una lista similar y devuelve la coincidencia más cercana.

Ejemplo aleatorio (no real), una aplicación que muestra un color, “OK Glass, muestra el color rojo”

‘mostrar el color’ podría ser su disparador de voz y parece estar acompañado por un cristal en un método de ‘vecino más cercano’; sin embargo, ‘rojo’ simplemente se lee como texto libre y podría malinterpretarse fácilmente como ‘pavor’ o ‘cabeza’, o incluso ‘leer’ ya que no hay forma de diferenciar ‘leer’ de ‘rojo’.

¿Hay alguna manera de pasar una lista de opciones preaprobadas (rojo, verde, azul, naranja *, etc.) a esta etapa, o a otro mensaje de voz dentro de la aplicación para que el usuario pueda ver la lista y obtener resultados más precisos? cuando hay un conjunto finito de respuestas esperadas (como la principal pantalla de cristal ok)?

* bueno, bueno, nada rima con naranja, probablemente estamos a salvo allí

Google GDK aún no es compatible con esta función. Sin embargo, las características necesarias ya están disponibles en algunas bibliotecas y puede usarlas siempre que el GDK no lo admita de forma nativa. Lo que tienes que hacer:

  1. Extraiga GlassVoice.apk de su Glass: adb pull /system/app/GlassVoice.apk

  2. Usa dex2jar para convertir este apk en un archivo jar.

  3. Agregue el archivo jar a su ruta de comstackción

Ahora puede usar esta biblioteca de esta manera:

 public class VoiceActivity extends Activity { private VoiceInputHelper mVoiceInputHelper; private VoiceConfig mVoiceConfig; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.voice_activity); String[] items = {"red", "green", "blue", "orange"}; mVoiceConfig = new VoiceConfig("MyVoiceConfig", items); mVoiceInputHelper = new VoiceInputHelper(this, new MyVoiceListener(mVoiceConfig), VoiceInputHelper.newUserActivityObserver(this)); } @Override protected void onResume() { super.onResume(); mVoiceInputHelper.addVoiceServiceListener(); } @Override protected void onPause() { super.onPause(); mVoiceInputHelper.removeVoiceServiceListener(); } public class MyVoiceListener implements VoiceListener { protected final VoiceConfig voiceConfig; public MyVoiceListener(VoiceConfig voiceConfig) { this.voiceConfig = voiceConfig; } @Override public void onVoiceServiceConnected() { mVoiceInputHelper.setVoiceConfig(mVoiceConfig, false); } @Override public void onVoiceServiceDisconnected() { } @Override public VoiceConfig onVoiceCommand(VoiceCommand vc) { String recognizedStr = vc.getLiteral(); Log.i("VoiceActivity", "Recognized text: "+recognizedStr); return voiceConfig; } @Override public FormattingLogger getLogger() { return FormattingLoggers.getContextLogger(); } @Override public boolean isRunning() { return true; } @Override public boolean onResampledAudioData(byte[] arg0, int arg1, int arg2) { return false; } @Override public boolean onVoiceAmplitudeChanged(double arg0) { return false; } @Override public void onVoiceConfigChanged(VoiceConfig arg0, boolean arg1) { } } } 

Puede aprovechar el paso de desambiguación que se produce cuando varias actividades o servicios admiten el mismo Voice Trigger : simplemente tenga varias actividades o servicios en su aplicación que soporten "show me the color" como el activador por voz y etiquételos con las opciones de color.

Su manifiesto sería algo así como:

                

Esas actividades o servicios solo se usarían como un “trampolín” para lanzar la lógica principal de su aplicación con la selección de color.

Si aún no lo ha hecho, debería echar un vistazo a los menús contextuales de voz que se agregaron hace unas semanas al GDK. Tuve exactamente el mismo problema justo el día anterior a su lanzamiento, lo miré al día siguiente y encontré que esto me ayudó mucho. 🙂