2014-11-17 13 views
8

Mam problem z nowym Android API21, w szczególności z VoiceInteractorService.Android API21: VoiceInteractionService onReady() nie nazywane

Chciałbym użyć nowego wykrywania Hotword w API21. Jeśli naciśniesz przycisk, powinno rozpocząć się wykrywanie słowa kluczowego dla słowa "google".

Kiedy mam aktywny (główną działalność) i chcę zadzwonić do createAlwaysOnHotwordDetector (keyphrase String, Locale lokalizacji, AlwaysOnHotwordDetector.Callback callback) metodę z VoiceInteractorService, pojawia się błąd: java.lang.IllegalStateException: Niedostępne aż Wywoływana jest funkcja onReady(). Próbowałem rozwiązać ten problem tymczasowo, wykorzystując chwilę przy próbie wywołania pętli catch, aby zobaczyć, kiedy wywoływana jest funkcja onReady() i mogę wywołać metodę createAlwaysOnHotwordDetector(). Dowiedziałem się, że onReady() nigdy nie jest wywoływany, nawet po zwolnieniu pętli systemu przez 15 minut.

Czy ktoś ma pomysł, jak rozwiązać ten problem?

Z góry dziękuję.

To jest moja aktywność w zakresie wywoływania usługi VoiceInteractor.

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 
      } 
     }; 
    } 
} 
+0

Chciałbym też to wiedzieć. – user1810737

+0

Znaleziono tę aplikację testową od Google, ale wciąż niejasne, jak zadzwonić do OnReady. https://android.googlesource.com/platform/frameworks/base/+/fb30d6936a4793a3369fbf8bf51fa526b8a77272/tests/VoiceInteraction/src/com/android/test/voiceinteraction?autodive=0/ – LHeslenfeld

Odpowiedz

0

VoiceInteractionService został zaprojektowany do podklasy w celu stworzenia własnej usługi interakcji głosowej. Tylko jedna taka usługa może być włączona na raz, tak jak klawiatura. Po włączeniu przez użytkownika jest on aktywny wszędzie, a nie tylko w określonej aktywności.

Nie można użyć funkcji VoiceInteractionService w celu zapewnienia rozpoznawania głosu dla określonej czynności.

Powiązane problemy