2016-05-25 6 views
1

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; 
} 

}

Antwort

4

ähnliche Danach

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); 

Versuchen Sie, die onActivityResult() -Methode in Ihrer Aktivitätsdatei außer Kraft setzen (wo Sie genannt das Fragment)

@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

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

+0

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() .) –

+0

Ich habe ein bisschen Bearbeiten zu meiner Antwort gemacht. Versuchen Sie es –

2

Ich arbeitete an der Absicht und habe es funktioniert. Ich habe Local.JAPANESE durch ja_JP ersetzt und es hat funktioniert.

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"); 
Verwandte Themen