2014-02-18 2 views
3

Я создаю приложение с подглядыванием GDK, и у меня возникают проблемы с получением распознавания речи, работающего в погруженном приложении. Это мой первый проект для Android.Ошибка речи SpeechRecognizer со стеклом

Я пытался следовать этому: How can I use speech recognition without the annoying dialog in android phones

После того, первоначальный прогресс, я ударил проблема, где класс RecognitionListener бросает Error 9, недостаточно прав.

Я использую GDK, который является Android-15.

Инициализация распознавателя в моем методе OnCreate():

sr = SpeechRecognizer.createSpeechRecognizer(this);  
sr.setRecognitionListener(new listener()); 

Когда приемник в водопроводную функцию обратного вызова, я начинаю слушать:

private GestureDetector createGestureDetector(Context context) { 
     GestureDetector gestureDetector = new GestureDetector(context); 
     //Create a base listener for generic gestures 
     gestureDetector.setBaseListener(new GestureDetector.BaseListener() { 
      @Override 
      public boolean onGesture(Gesture gesture) { 
//    Log.info(gesture.name()); 
       if (gesture == Gesture.TAP) { 
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);   
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
        intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,"voice.recognition.test"); 

        intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,5); 
        sr.startListening(intent); 
        return true; 
       } 
       return false; 
      } 
     }); 

     return gestureDetector; 
    } 

А вот определение моего класса слушателя :

class listener implements RecognitionListener   
    { 
     public void onReadyForSpeech(Bundle params) 
     { 
      Log.d(TAG, "onReadyForSpeech"); 
     } 
     public void onBeginningOfSpeech() 
     { 
      Log.d(TAG, "onBeginningOfSpeech"); 
     } 
     public void onRmsChanged(float rmsdB) 
     { 
      Log.d(TAG, "onRmsChanged"); 
     } 
     public void onBufferReceived(byte[] buffer) 
     { 
      Log.d(TAG, "onBufferReceived"); 
     } 
     public void onEndOfSpeech() 
     { 
      Log.d(TAG, "onEndofSpeech"); 
     } 
     public void onError(int error) 
     { 
      Log.d(TAG, "error " + error); 
//    mText.setText("error " + error); 
     } 
     public void onResults(Bundle results)     
     { 
      String str = new String(); 
      Log.d(TAG, "onResults " + results); 
      ArrayList<String> data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
      for (int i = 0; i < data.size(); i++) 
      { 
         Log.d(TAG, "result " + data.get(i)); 
         str += data.get(i); 
      } 
//    mText.setText("results: "+String.valueOf(data.size()));   
     } 
     public void onPartialResults(Bundle partialResults) 
     { 
      Log.d(TAG, "onPartialResults"); 
     } 
     public void onEvent(int eventType, Bundle params) 
     { 
      Log.d(TAG, "onEvent " + eventType); 
     } 
    } 

Вот мой файл манифеста:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.medicalglass" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="15" 
     android:targetSdkVersion="15" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.medicalglass.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

Сразу после того, как произошло событие касания, и я вызываю начало прослушивания, метод onError слушателя вызывается с кодом ошибки 9, что означает недостаточные разрешения. Если у кого-то есть опыт работы с командами речи в Android, или с помощью голосовых команд, и знать, почему это продолжается, я был бы очень благодарен. Благодарю.

+0

можете ли вы разместить файл манифеста, пожалуйста? – Dyna

+0

Извините, теперь его опубликовано. Спасибо, что посмотрели. – samgoodness

+0

Я не уверен, что это проблема, но ваше имя пакета в манифесте: 'package =" com.example.medicalglass ", и здесь у вас есть тестовый:' intent.putExtra (RecognizerIntent.EXTRA_CALLING_PACKAGE, "voice.recognition .test "),' разве они не должны быть одинаковыми? – Dyna

ответ

2

Start, изменив этот код:

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);   
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,"voice.recognition.test"); 

К этому коду:

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getApplication().getPackageName()); 
speechRecognizer.startListening(intent); 

EDIT: Добавить это манифеста:

<uses-permission android:name="android.permission.RECORD_AUDIO" /> 

Если у вас есть ошибка, пожалуйста, мимо вашего LogCat.

0

распознавания голоса не доступны в автономном режиме (пока?), Увидеть это Google Glass просил функцию для обеспечения возможности автономного распознавания голоса (Issue 305)

1

Это должно быть в настоящее время работает с 19 уровня API и двух разрешений, упомянутых выше.

Смежные вопросы