こんにちは私はアンドロイドのための日本語学習アプリを作っています。機能の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;
}
}
これは私にとっては役に立ちません。私はフラグメントを使用しており、OnActivityResultはありません。 また、上記のコードでエラーが見つかりました。私はrecognizerIntentの使用を意図しています。それはまだ運がないことを修正した。 私は自分の設定に嫌われ、日本語を自分のデフォルトの言語にしていましたが、それは機能しましたが、それはうまく動作する方法です。 – user2575373
フラグメントを使用している場合は、アクティビティファイル(アクティビティからフラグメントを呼び出す場所)にonActvityResult()メソッドを定義する必要があります。フラグメントクラスでは、getActivity()。startActivityForResult 。) –
私は少し私の答えに編集しました。それを試してください –