Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android startActivityForResult request code different than given when starting google voice-to-text

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/

like image 791
nim_10 Avatar asked Mar 24 '26 17:03

nim_10


1 Answers

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

like image 72
Roman T. Avatar answered Mar 26 '26 07:03

Roman T.