Android API21: VoiceInteractionService onReady () no se llama

Tengo un problema con la nueva API21 de Android, específicamente el VoiceInteractorService.

Me gustaría usar la nueva detección de Hotword en API21. Si presiono un botón, una detección de hotword para la palabra 'google' debe comenzar.

Cuando tengo una Actividad (MainActivity) y quiero llamar al método createAlwaysOnHotwordDetector (String keyphrase, Locale locale, AlwaysOnHotwordDetector.Callback) del VoiceInteractorService, obtengo un error: java.lang.IllegalStateException: No disponible hasta que onReady () sea llamado. Intenté solucionar esto temporalmente usando un rato con el bucle del tirón del intento para ver cuando onReady () se llama y puedo excecute el método de createAlwaysOnHotwordDetector (). Me enteré de que onReady () nunca se llama, incluso después de dejar que el sistema de bucle de 15 minutos.

¿Alguien tiene una idea de cómo resolver este problema?

Gracias por adelantado.

Esta es mi actividad para llamar a VoiceInteractorService.

import java.util.Locale; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.service.voice.AlwaysOnHotwordDetector; import android.service.voice.AlwaysOnHotwordDetector.Callback; import android.service.voice.VoiceInteractionService; import android.service.voice.AlwaysOnHotwordDetector.EventPayload; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { Button btn; VoiceInteractionService service; AlwaysOnHotwordDetector.Callback callback; Locale locale = new Locale("nl-NL"); Context ctx; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.button1); ctx = getApplicationContext(); service = new VoiceInteractionService(); btn.setOnClickListener(new OnClickListener() { // Create Hotword detector on button click @Override public void onClick(View v) { service.createAlwaysOnHotwordDetector("google", locale, callback); } }); callback = new Callback() { @Override public void onRecognitionResumed() { // TODO Auto-generated method stub } @Override public void onRecognitionPaused() { // TODO Auto-generated method stub } @Override public void onError() { // TODO Auto-generated method stub Log.d("error", "error"); } @Override public void onDetected(EventPayload eventPayload) { // TODO Auto-generated method stub // Display Toast message when Hotword is detected Toast.makeText(ctx, "Google", Toast.LENGTH_LONG).show(); } @Override public void onAvailabilityChanged(int status) { // TODO Auto-generated method stub } }; } } 

VoiceInteractionService está diseñado para ser subclaseado para crear su propio servicio de interacción de voz. Sólo uno de estos servicios se puede activar a la vez, al igual que un teclado. Una vez habilitado por el usuario, está activo en todas partes, no sólo en una actividad particular.

No puede utilizar VoiceInteractionService para proporcionar reconocimiento de voz para una actividad determinada.

  • ¿Cuáles son las ventajas y desventajas de ejecutar un servicio en un proceso diferente?
  • Android: mantener vivo un servicio de fondo (prevenir la muerte del proceso)
  • ¿Cómo diseñar interacción servicio-actividad para un simple reproductor de mp3?
  • Android "cerrar la fuerza" lo que exactamente sucede con la memoria
  • Servicio de Android en la biblioteca
  • ¿Cómo comprobar si un servicio ya se está ejecutando o no en android?
  • En Android para comprobar la conexión a Internet está disponible para la frecuencia?
  • Cómo evitar que el servicio se ejecute de nuevo si ya está ejecutando android
  • ¿Hay una manera de mantener los meta-datos en el manifiesto de Android privados al paquete?
  • ¿Estoy consiguiendo los pasos correctos para verificar la suscripción de Android de un usuario en la aplicación?
  • Android jobScheduler no se detendrá con jobFinished (params, false)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.