Reputation: 9276
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
Upvotes: 23
Views: 50854
Reputation: 344
this code is to set the language in speech recognization
String languagePref = "te-IN";//this is for telugu
//kannada ---> "kn-IN"
//tamil---> "ta-IN".....
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, languagePref);
Upvotes: 2
Reputation: 473
I tried to use
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
but it did not work for me (did not take the system language). Helped here like this:
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault().toString());
Upvotes: 3
Reputation: 11
I used this code:
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US");
Hope you can run your app now.
Upvotes: 0
Reputation: 2609
there is no solution but a hackaround...
intent.putExtra("android.speech.extra.EXTRA_ADDITIONAL_LANGUAGES", new String[]{"en"});
check here the complete story.
Upvotes: 12
Reputation: 12159
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
Upvotes: 50
Reputation: 1851
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.
Upvotes: 6
Reputation: 131
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.
Upvotes: 13
Reputation: 769
Have you tried this:
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");
Upvotes: 8