2012-08-24 12 views
7

Uso el servicio de reconocimiento de voz de Android desde mi aplicación.¿Está ocupado el servicio de reconocimiento de voz de Android?

Resulta que cuando dos clientes intentan enviar solicitudes al mismo tiempo (por ejemplo, el usuario inició una búsqueda de voz desde una aplicación, luego cambió a otra mientras la búsqueda estaba activa y lanzó otra búsqueda), el servicio deja de funcionar.

¿Hay alguna manera de determinar si hay una sesión de reconocimiento de voz en curso, para que pueda negarme a iniciar otra?

Respuesta

1

Probablemente debería estar atrapando ERROR_RECOGNIZER_BUSY en el controlador onError:

@Override 
public void onError(int error) { 
    switch (error) { 
    case SpeechRecognizer.ERROR_RECOGNIZER_BUSY: 
     // do something reasonable 
    … 
    } 
} 

Lo más probable (? Solamente) va a recibir ese sobre una solicitud para empezar a escuchar; desafortunadamente, no conozco ninguna forma de probar esta condición sin intentarlo (por ejemplo, no creo que pueda pre-detectar el oyente de otro proceso estando activo para quitar un botón del micrófono)

(Al dejar de escuchar, ' d solo obtendría este error si estuvieras tratando de matar al oyente de otro proceso de alguna manera.)

0

Recibí este error (ERROR_RECOGNIZER_BUSY) y descubrí que el paquete faltaba en mi configuración de intención. Así que acabo de agregar esta línea y funciona ahora:

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
... 
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, context.getPackageName()); 
Cuestiones relacionadas