12

android.speech.SpeechRecognizer API를 사용하여 음성을 사용하고 있습니다. 나는 안드로이드 4-5에서 잘 작동Android 7 Nougat에서 Android Speech Recognition API가 작동하지 않습니다.

,

이 존재하므로 지금, 마이크가 켜지 연설로 감지 될 때 발생하는 차임과 같은 버그의 무리를 가지고 안드로이드 6에서

(그리고 루프 무기한 음성이 감지되어 다시 시작될 때 소리가 들리기 전에 볼륨을 0으로 설정하는 해킹 방법이 있습니다 ...)

안드로이드 6에서는 5 초 후에도 음성이 나 빠지며 죽습니다 . 5 초 동안 활동이 감지되지 않고 다시 시작되는 또 다른 해킹 해결 방법이 있습니다 ...

이제 Android 7에서 음성 인식이 전혀 작동하지 않습니다. 왜 아직 디버그하지 못했지만 Android 7에서 작동하도록 음성 API를 가져 오는 데 문제가있는 사람이 있습니까?

또한 안드로이드가 각 릴리스의 스피치 API에 새로운 버그를 추가하고 수정하지 않는 것으로 알고있는 사람이라면 누구나 회신 해주십시오. Android에서 지원해야하는 것입니까, 아니면 대신 Google 의도를 사용하고 싶습니까?

+1

유 사용하고있는 장치? 많은 누갓 (nugat) 기기들은 그들이 말하는 것처럼 말하지만 일부 64 비트 앱을 지원하지 않습니다. 32 비트로 빌드 해보십시오. 나는 비슷한 문제가 있었고 이런 식으로 해결했다. –

+1

~ 2 년 동안 API가 변경되지 않았습니다 (https://android.googlesource.com/platform/frameworks/base/+log/refs/heads/master/core/java/android/speech 참조). 이 API의 구현에서 문제를 설명하고 있지만 어떤 구현 (이름, 버전 번호 등)인지는 언급하지 않았습니다. 많은 휴대 전화에는 Google 구현이 미리 설치되어 있지만 Android 자체에는 음성 인식 프로그램 구현이 포함되어 있지 않습니다. . – Kaarel

+1

삼성 G7 안드로이드 7, 음성 작동하지 않습니다 – James

답변

4

내 코드 Nexus5x (누가)와 Nexus9 (누가)

시도와 쇼 로그 캣에 잘 작동합니다. (아마도 중복) 매니페스트

SpeechRecognizer mGoogleSr; 

void initGoogleSr(Context context) { 
    mGoogleSr = SpeechRecognizer.createSpeechRecognizer(context); 
    mGoogleSr.setRecognitionListener(new GoogleSrListener()); 
} 

void startGoogleSr() { 
    if (mGoogleSr != null) { 
     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, getPackageName()); 
     intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true); 
     mGoogleSr.startListening(intent); 
    } 
} 
void cancelRecognizing() { 
    if (mGoogleSr != null) { 
     mGoogleSr.cancel(); 
    } 
} 

public class GoogleSrListener implements RecognitionListener { 
    String lastPartialText; 

    @Override 
    public void onReadyForSpeech(Bundle params) { 
     Log.v(TAG, ">>> onReadyForSpeech"); 
     showMessage("ready"); 
    } 

    @Override 
    public void onBeginningOfSpeech() { 
     Log.v(TAG, ">>> onBeginningOfSpeech"); 
     showMessage("recognizing"); 
    } 

    @Override 
    public void onRmsChanged(float rmsdB) { 
    } 

    @Override 
    public void onBufferReceived(byte[] buffer) { 

    } 

    @Override 
    public void onEndOfSpeech() { 
     Log.v(TAG, ">>> onEndOfSpeech"); 
     showMessage("waiting result"); 
    } 

    @Override 
    public void onError(int error) { 
     Log.v(TAG, ">>> onError : " + error); 
     switch (error) { 
      case SpeechRecognizer.ERROR_AUDIO: 
       Log.e(TAG, "ERROR_AUDIO"); 
       break; 
      case SpeechRecognizer.ERROR_CLIENT: 
       Log.e(TAG, "ERROR_CLIENT"); 
       break; 
      case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS: 
       Log.e(TAG, "ERROR_INSUFFICIENT_PERMISSIONS"); 
       break; 
      case SpeechRecognizer.ERROR_NETWORK: 
       Log.e(TAG, "ERROR_NETWORK"); 
       break; 
      case SpeechRecognizer.ERROR_NETWORK_TIMEOUT: 
       Log.e(TAG, "ERROR_NETWORK_TIMEOUT"); 
       break; 
      case SpeechRecognizer.ERROR_RECOGNIZER_BUSY: 
       Log.e(TAG, "ERROR_RECOGNIZER_BUSY"); 
       break; 
      case SpeechRecognizer.ERROR_SERVER: 
       Log.e(TAG, "ERROR_SERVER"); 
       break; 
      case SpeechRecognizer.ERROR_NO_MATCH: 
       Log.v(TAG, "ERROR_NO_MATCH"); 
       break; 
      case SpeechRecognizer.ERROR_SPEECH_TIMEOUT: 
       Log.v(TAG, "ERROR_SPEECH_TIMEOUT"); 
       break; 
      default: 
       Log.v(TAG, "ERROR_UNKOWN"); 
     } 
    } 

    @Override 
    public void onPartialResults(Bundle partialResults) { 
     Log.v(TAG, ">>> onPartialResults"); 
     List<String> resultList = partialResults.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
     if (resultList != null) { 
      String text = resultList.get(0); 
      if (text.equals(lastPartialText)) { 
       return; 
      } 
      lastPartialText = text; 
      Log.v(TAG, "partial : " + text); 
     } 
    } 

    @Override 
    public void onResults(Bundle results) { 
     Log.v(TAG, ">>> onResults"); 
     List<String> resultList = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
     if (resultList != null) { 
      String text = resultList.get(0); 
      Log.v(TAG, "result : " + text); 
      showMessage(text); 
     } 
    } 

    @Override 
    public void onEvent(int eventType, Bundle params) { 
     Log.v(TAG, ">>> onEvent type = " + eventType); 
    } 
} 

권한 :

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />