How to set the language in speech recognition on android?

I’ve been working on speech Recognition API in android and found out that the speech results vary allot when the language settings are changed , is there a way to set it programmatically ? or is there an intent to lunch the speech language settings screen ? or what else ?
note:
I tried to use this intent extra:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en-US");

but it was ineffective

  • Android Facedetector pose values are always 0
  • Android PopupWindow showAsDropDown() not working properly
  • Sync Adapter without Account
  • RelativeLayout center vertical
  • User Notifications - How to recover a lost notification_id from GCM?
  • How do I send JSon as BODY In a POST request to server from an Android application?
  • Related posts:

    Switching to Camera2 in Android Vision API
    Android: keep task's activity stack after restart from HOME
    Keeping Android development separate from private account
    Android Error inflating class SwipeRefreshLayout
    Animation not starting until UI updates or touch event
    Chromecast Sender App Doesn't Detect Disconnection/Reconnection
  • Adb install failure: INSTALL_CANCELED_BY_USER
  • Android: How to Detect “Turn on USB storage” Broadcast?
  • How do I use SharedPreferences in Xamarin.Android?
  • How to programmatically force bluetooth low energy service discovery on Android without using cache
  • Android ImageButton — can't get image in the center
  • Is it a good practice to wrap all layouts in CoordinatorLayout?
  • 6 Solutions collect form web for “How to set the language in speech recognition on android?”

    As pargat says, this will do it:

    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");
    

    Also, your app can query for the list of supported languages by sending a RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS ordered broadcast like so:

        Intent detailsIntent =  new Intent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS);
        sendOrderedBroadcast(
                detailsIntent, null, new LanguageDetailsChecker(), null, Activity.RESULT_OK, null, null);
    

    where LanguageDetailsChecker is something like this:

    public class LanguageDetailsChecker extends BroadcastReceiver
    {
        private List<String> supportedLanguages;
    
        private String languagePreference;
    
        @Override
        public void onReceive(Context context, Intent intent)
        {
            Bundle results = getResultExtras(true);
            if (results.containsKey(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE))
            {
                languagePreference =
                        results.getString(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE);
            }
            if (results.containsKey(RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES))
            {
                supportedLanguages =
                        results.getStringArrayList(
                                RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES);
            }
        }
    }
    

    For the complete code check out this github project:
    https://github.com/gast-lib

    there is no solution but a hackaround…

    intent.putExtra("android.speech.extra.EXTRA_ADDITIONAL_LANGUAGES", new String[]{"en"});
    

    check here the complete story.

    Have you tried this:

    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");
    

    This will work:

    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en_US");
    

    You have to use “en_US” instead of “en-US”. The former is the right format of Java locale tag.

    It is suggested that you use

    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.US.toString());
    

    to avoid remembering such detail.

    I finally got my app to restrict voice recognition results to a specified language input (handing it, e.g., “ja” for Japanese or “fr” for French) by adding all 3 of the following extras:

    String languagePref = "de";//or, whatever iso code...
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, languagePref);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, languagePref); 
    intent.putExtra(RecognizerIntent.EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE, languagePref);
    

    Hope this helps someone.

    I used this code:

    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US");
    

    Hope you can run your app now.

    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.