Hallo, ich mache eine japanische Lern-App für Android. Eine der Funktionen ist, mit der App auf Japanisch zu sprechen, um zu überprüfen, ob Sie Wörter richtig sagen. Ich habe es funktioniert mit aber ich mochte nicht die ui
in die Quere kommen, so entschied ich mich, einen anderen Router gehen und haben mein Fragment implementieren RecognitionListener
. Aus irgendeinem Grund funktioniert jetzt Japanisch nicht und es zeigt englische Wörter. Ich bin mir nicht sicher, was los ist.Android Ändern der Sprache der Sprache in den Text zu Japanisch funktioniert nicht
Hier ist mein Code für meine Rede Fragment
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;
}
}
Dies funktioniert nicht für mich. Ich benutze ein Fragment und ich habe kein OnActivityResult. Auch ich fand einen Fehler in meinem Code oben. Ich mache eine neue Absicht beabsichtigen, recognizerIntent zu verwenden. Behoben das und immer noch kein Glück. Ich ging nicht zu meinen Einstellungen und machte Japanisch meine Standardsprache und es funktionierte, aber das ist eine schmutzige Art, es zur Arbeit zu bringen. – user2575373
Wenn Sie das Fragment verwenden, müssen Sie die Methode onActvityResult() in Ihrer Aktivitätsdatei definieren (Stelle, an der Sie Fragment aus Aktivität aufgerufen haben). Danach können Sie es in der Fragmentklasse mit getActivity() aufrufen. StartActivityForResult() .) –
Ich habe ein bisschen Bearbeiten zu meiner Antwort gemacht. Versuchen Sie es –