In my app, I am trying to start google voice-to-text using RecognizerIntent from a fragment. The value of the request code was given 1010 but on the startActivityForResult the request code returned was 197618.
The request varable has been set as:
// static result code, random integer
public static final int REQUEST_CODE_VOICE = 1010;
// set intent for recognize speech
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
onActivityCreated method of fragment, where intent has been started:
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// put language
//intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US");
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
//intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
getString(R.string.speech_prompt));
// tap button on click listener
btnTap.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
// start activity
Log.d("onActivityResult", "voice activity started");
startActivityForResult(intent, REQUEST_CODE_VOICE);
Log.d("onActivityResult", "voice activity finished");
} catch(ActivityNotFoundException e) {
// the device does not support android speech
showToast("Your Device Does Not Support Speech Recognition!");
}
}
});
}
Here is the onActivityResult method at MainActivity
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d("onActivityResult", "request: "+requestCode+", result: "+resultCode);
switch(requestCode) {
// Speech to Text
case VoiceControllerFragment.REQUEST_CODE_VOICE:
// get the results
ArrayList<String> text
= data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
// show results
TextView tvRecognizedText = (TextView) findViewById(R.id.tv_recognized_text);
// tmp string
//String tmpStr = "";
tvRecognizedText.setText( "Success: " );
Log.d("onActivityResult voice", "result: "+RESULT_OK);
if(resultCode == RESULT_OK && data != null) {
// concatenate all results
for(String str : text) {
tvRecognizedText.setText( tvRecognizedText.getText().toString() + str );
}
Log.d("speech", text.get(0));
} else {
tvRecognizedText.setText( "Sorry! Unrecognizable speech.\nTry again!!" );
}
break;
}
}
Here is the log I got:
04-10 23:11:13.005 29915-29915/? D/onActivityResult﹕ voice activity started
04-10 23:11:13.065 29915-29915/? D/onActivityResult﹕ voice activity finished
04-10 23:11:24.855 29915-29915/? D/onActivityResult﹕ request: 197618, result: -1
Tested in: Samsung Galaxy S2, JellyBean
ref: http://viralpatel.net/blogs/android-speech-to-text-api/ http://www.androidhive.info/2014/07/android-speech-to-text-tutorial/
For those who was figuring out this as well as I was - if you are calling startActivityForResult(intent, REQUEST_CODE_VOICE); from Fragment - add getActivity() to it like so:
getActivity().startActivityForResult(intent, REQUEST_CODE_VOICE);
Without it your onActivityResult() method will be triggered with various request codes, except one needed (the one that you've used in startActivityForResult()).
Hope this'll help someone
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With