12

私はandroid.speech.SpeechRecognizer APIを使用しています。Android 7のヌガーでAndroid Speech Recognition APIが動作しない

私は、Android 4-5で素晴らしい作品、アンドロイド6では

マイクがオンになったときに発生するチャイムが音声として検出されるように、それは今、バグの束を持っているので、それが存在する(と無限にループスピーチが検出されたために再起動すると、チャイムが再生される前に音量を0に設定するためのハックの回避策があります...)

5秒後に、 。 5秒間アクティビティが検出されずに再起動されるというハックの回避策があります。

Android 7では、音声認識がまったく動作しないようですか? なぜ私はまだデバッグできませんでしたが、誰かがAndroid 7で動作するようにスピーチAPIを取得することに問題がありましたか?

また、AndroidがスピーチAPIに新しいバグを追加していて、修正していないようだと誰もが知っている場合は、返信してください。 これはAndroidでサポートする必要がありますか、代わりにGoogleの意図を使用したいと思っていますか?

+1

uはどのデバイスを使用していますか?多くのnugatデバイスは、たとえ彼らが言っていても、いくつかの64ビットアプリケーションをサポートしていません。 32ビットで構築してみてください。私は同様の問題を抱えていました。 –

+1

APIは〜2年間は変更されていません(https://android.googlesource.com/platform/frameworks/base/+log/refs/heads/master/core/java/android/speechを参照)。あなたはこのAPIの実装で問題を説明していますが、実装にはその名前(バージョン番号など)は言及されていません。多くの携帯電話でGoogleの実装がプリインストールされています。 – Kaarel

+1

Android 7のサムスンG7、スピーチが動作していない – James

答えて

4

私のコードはNexus5x(ヌガー)とNexus9(ヌガー)

試してみるとショーlogcatに正常に動作します。 (多分冗長)マニフェストに

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" /> 
関連する問題