2016-05-25 13 views
1

こんにちは私はアンドロイドのための日本語学習アプリを作っています。機能の1つは、あなたが正しく言葉を言っているかどうかを確認するために、日本語でアプリに話すことです。私はそれをpromptSpeechInputと一緒に扱うことにしましたが、私はuiが邪魔になるのを好きではなかったので、私は別の敗走に行き、私のフラグメントを実装しましたRecognitionListener。何らかの理由で、現在日本語は機能していないし、英語の単語を表示している。私は何が間違っているのか分かりません。ここでAndroid日本語のテキストを日本語に翻訳する言語を変更する

は私のスピーチフラグメント

public class SpeechFragment extends Fragment implements RecognitionListener { 

private TextView textViewInput; 
private ToggleButton buttonSpeak; 
private SpeechRecognizer speech = null; 
private Intent recognizerIntent; 

public SpeechFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_speech, container, false); 


    speech = SpeechRecognizer.createSpeechRecognizer(this.getContext()); 
    speech.setRecognitionListener(this); 

    recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.JAPANESE); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3); 



    textViewInput = (TextView) view.findViewById(R.id.textViewInput); 
    buttonSpeak = (ToggleButton) view.findViewById(R.id.buttonSpeak); 
    buttonSpeak.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, 
            boolean isChecked) { 
      if (isChecked) { 
       speech.startListening(recognizerIntent); 
      } else { 
       speech.stopListening(); 
      } 
     } 
    }); 

return view; 

} 

@Override 
public void onResume() { 
    super.onResume(); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    if (speech != null) { 
     speech.destroy(); 
    } 

} 

@Override 
public void onBeginningOfSpeech() { 
    textViewInput.setText("Speak"); 
} 

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

@Override 
public void onEndOfSpeech() { 
    buttonSpeak.setChecked(false); 
} 

@Override 
public void onError(int errorCode) { 
    String errorMessage = getErrorText(errorCode); 
    textViewInput.setText(errorMessage); 
    buttonSpeak.setChecked(false); 
} 

@Override 
public void onEvent(int arg0, Bundle arg1) { 
} 

@Override 
public void onPartialResults(Bundle arg0) { 
} 

@Override 
public void onReadyForSpeech(Bundle arg0) { 
} 

@Override 
public void onResults(Bundle results) { 
    ArrayList<String> matches = results 
      .getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
    String text = ""; 
    for (String result : matches) 
     text += result + "\n"; 

    textViewInput.setText(text); 
} 

@Override 
public void onRmsChanged(float rmsdB) { 
} 

public static String getErrorText(int errorCode) { 
    String message; 
    switch (errorCode) { 
     case SpeechRecognizer.ERROR_AUDIO: 
      message = "Audio recording error"; 
      break; 
     case SpeechRecognizer.ERROR_CLIENT: 
      message = "Client side error"; 
      break; 
     case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS: 
      message = "Insufficient permissions"; 
      break; 
     case SpeechRecognizer.ERROR_NETWORK: 
      message = "Network error"; 
      break; 
     case SpeechRecognizer.ERROR_NETWORK_TIMEOUT: 
      message = "Network timeout"; 
      break; 
     case SpeechRecognizer.ERROR_NO_MATCH: 
      message = "No match"; 
      break; 
     case SpeechRecognizer.ERROR_RECOGNIZER_BUSY: 
      message = "RecognitionService busy"; 
      break; 
     case SpeechRecognizer.ERROR_SERVER: 
      message = "error from server"; 
      break; 
     case SpeechRecognizer.ERROR_SPEECH_TIMEOUT: 
      message = "No speech input"; 
      break; 
     default: 
      message = "Didn't understand, please try again."; 
      break; 
    } 
    return message; 
} 

}

答えて

4

のための私のコードは、あなたの活動のファイルにonActivityResult()メソッドをオーバーライドします。その後、この

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.JAPANESE); 
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3); 
getActivity().startActivityForResult(intent,requestCode); 

ようにしてみている(あなたが呼ばれる場所断片)

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    ArrayList<String> words=data.getExtras().getStringArrayList(RecognizerIntent.EXTRA_RESULTS); 
    //Here you can get the spoken words 
} 
+0

これは私にとっては役に立ちません。私はフラグメントを使用しており、OnActivityResultはありません。 また、上記のコードでエラーが見つかりました。私はrecognizerIntentの使用を意図しています。それはまだ運がないことを修正した。 私は自分の設定に嫌われ、日本語を自分のデフォルトの言語にしていましたが、それは機能しましたが、それはうまく動作する方法です。 – user2575373

+0

フラグメントを使用している場合は、アクティビティファイル(アクティビティからフラグメントを呼び出す場所)にonActvityResult()メソッドを定義する必要があります。フラグメントクラスでは、getActivity()。startActivityForResult 。) –

+0

私は少し私の答えに編集しました。それを試してください –

2

私はその意図に基づいて作業しました。私はLocal.JAPANESEをja_JPに置き換えました。

recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "ja_JP"); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_PROMPT,"Speak"); 
関連する問題