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
Click Start -> Control Panel -> Ease of Access and switch to Speech recognition. Click Advanced speech options and choose the language from the list.
In order to add a spoken language on your keyboard, you'll first need to make sure the Google Keyboard is installed from within the Settings app. After doing that, you'll be able to add languages to the dictation menu by tapping the microphone option to access the "Add or Remove Languages" menu.
Navigate to and open Settings, and then tap General Management. Tap Language, and then tap Add language. If you don't see the language you are looking for, tap More options (the three vertical dots), tap All languages, and then select your desired language.
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
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.
there is no solution but a hackaround...
intent.putExtra("android.speech.extra.EXTRA_ADDITIONAL_LANGUAGES", new String[]{"en"});
check here the complete story.
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