2014-02-18 2 views
3

GDK 스 니크 피크로 응용 프로그램을 작성 중이며 몰입 형 앱에서 음성 인식 기능을 사용하는 데 문제가 있습니다. 이것은 내 첫 번째 안드로이드 프로젝트입니다. SpeechRecognizer 유리 사용 권한 오류가 충분하지 않습니다.

나는이를 따라 시도 : How can I use speech recognition without the annoying dialog in android phones

초기 진행 상황을 한 후, 나는 RecognitionListener 클래스는 오류 9, 불충분 한 권한을 던지고 문제를했다.

Android-15 인 GDK를 사용하고 있습니다. 여기

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

그리고 내 리스너 클래스의 정의입니다 : 내가 탭 콜백 수신기 때

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

, 내가 듣기 시작 : 인식기의

초기화 내에서 onCreate() 메소드에 :

: 여기
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와 함께 호출됩니다. 누구든지 안드로이드 음성 명령이나 유리 음성 명령에 대한 경험이 있고 이것이 왜 계속 실패 하는지를 알고 있다면 나는 매우 감사하게 여길 것입니다. 감사.

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); 

편집 : 매니페스트이 추가 :이 코드에

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"); 

:이 코드를 변경하여

+0

매니페스트 파일을 넣을 수 있습니까? – Dyna

+0

죄송합니다, 지금 게시했습니다. 봐 주셔서 감사합니다. – samgoodness

+0

이것이 문제가 아니지만 매니페스트의 패키지 이름이'package = "com.example.medicalglass"'이고 여기에 테스트가 있습니다 :'intent.putExtra (RecognizerIntent.EXTRA_CALLING_PACKAGE, "voice.recognition .test "); 그들은 동일하지 않아야합니까? – Dyna

답변

2

시작

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

을 오류가있는 경우하시기 바랍니다 LogCat을 지나쳐야합니다.

0

음성 인식을 사용할 수없는 오프라인 (아직?)이 구글 유리는이 API 레벨 19 위에서 언급 한 두 가지 권한으로 지금 작업을해야

1

오프라인 음성 인식 (Issue 305)을 허용하는 기능을 요청하십시오.

관련 문제