5

Wir haben eine Demo-Android-Anwendung (Android 4.0.3), die Spracherkennung als Dienst ausführt und (kontinuierlich) die Ergebnisse der Erkennung in der Ansicht protokolliert.Ist es möglich, die Android-Spracherkennung (als benutzerdefinierten Dienst) auf Google Glass zu verwenden?

In unseren Smartphones funktioniert alles gut.

Wir möchten, dass dieses Szenario in einer Google Glass Tauchanwendung replizieren, aber wir diese Fehlermeldung immer, wenn wir versuchen, den Dienst zu starten:

keine ausgewählte Spracherkennungsdienst

Es gibt einige bekannte Einschränkungen? Oder hat jemand herausgefunden, wie man diese Art von Problem löst?

Vielen Dank im Voraus

Dies ist einige signifikante Code der Aktivität:

public class MainActivity extends Activity implements Observer { 
    ... 
    @Override 
    protected void onStart() { 
     super.onStart(); 
     //Toast.makeText(this, "Hi guys", Toast.LENGTH_LONG); 
     startService(new Intent(this, SilentVoiceRecognitionService.class)); 
    } 
    ... 
} 

Und dies ist der Code des Dienstes:

public class SilentVoiceRecognitionService extends Service { 
    protected AudioManager mAudioManager; 
    protected SpeechRecognizer mSpeechRecognizer; 
    protected Intent mSpeechRecognizerIntent; 
    protected final Messenger mServerMessenger = new Messenger(new IncomingHandler(this)); 

    private Model model = Model.getInstance(); 

    static final String TAG = "SilentRecognizer"; 
    static final int MSG_RECOGNIZER_START_LISTENING = 1; 
    static final int MSG_RECOGNIZER_CANCEL = 2; 

    protected boolean mIsListening; 

    @Override 
    public void onCreate() 
    { 
     super.onCreate(); 
     mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this); 
     mSpeechRecognizer.setRecognitionListener(new SpeechRecognitionListener()); 
     mSpeechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
     mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, 
            this.getPackageName()); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.i("LocalService", "Received start id " + startId + ": " + intent); 
     // We want this service to continue running until it is explicitly 
     // stopped, so return sticky. 

     mSpeechRecognizer.startListening(mSpeechRecognizerIntent); 

     return START_STICKY; 
    } 

    @Override 
    public void onDestroy() 
    { 
     super.onDestroy(); 

     if (mSpeechRecognizer != null) 
     { 
      mSpeechRecognizer.destroy(); 
     } 
    } 

    protected class SpeechRecognitionListener implements RecognitionListener 
    { 

     ... 
    } 


    protected static class IncomingHandler extends Handler 
    { 
     private WeakReference<SilentVoiceRecognitionService> mtarget; 

     IncomingHandler(SilentVoiceRecognitionService target) 
     { 
      mtarget = new WeakReference<SilentVoiceRecognitionService>(target); 
     } 


     @Override 
     public void handleMessage(Message msg) 
     { 
      final SilentVoiceRecognitionService target = mtarget.get(); 

      switch (msg.what) 
      { 
       case MSG_RECOGNIZER_START_LISTENING: 

        if (!target.mIsListening) 
        { 
        target.mSpeechRecognizer.startListening(target.mSpeechRecognizerIntent); 
         target.mIsListening = true; 
         //Log.d(TAG, "message start listening"); //$NON-NLS-1$ 
        } 
        break; 

       case MSG_RECOGNIZER_CANCEL: 
        target.mSpeechRecognizer.cancel(); 
        target.mIsListening = false; 
        //Log.d(TAG, "message canceled recognizer"); //$NON-NLS-1$ 
        break; 
      } 
     } 
    } 

}

+0

Haben Sie das Benutzerberechtigungs-Tag im Manifest Ihrer Anwendung hinzugefügt? –

+1

sicher:

+1

Außerdem ist es heutzutage möglich, eine Brille zu haben? Ok vergiss das. Ich denke, die Art der Spracherkennung in GG ist ein bisschen anders. Verweisen Sie [hier] (https://developers.google.com/glass/develop/gdk/input/voice). –

Antwort

0

Ab XE16 ist es nun möglich, den SpeechRecognizer direkt zu verwenden und die Ergebnisse über den SpeechRecognitionListener zu erhalten.

Leider funktioniert das offline immer noch nicht.