CitizenSmif CitizenSmif - 1 year ago 170
Android Question

Speech Recognition - get all languages supported - Android

I'm having a hard time getting this to work. I'm just trying to find out all the available languages supported by speech recognition, and also the code to use it.

There is


Which should report back all available languages on G's speech recog servers as an array. Unfortunately I can't even get it to spit out one. I'm mainly just having problems with the BroadcastReceiver I think.

package com.thatll.ddo;

import java.util.ArrayList;
import java.util.logging.Logger;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.util.Log;
import android.widget.Toast;

public class RecogtestActivity extends Activity {
private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;

/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {

Log.i("Log", "startVoiceRecognitionActivity");
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "speech recognition demo");

startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {

Intent intent = new Intent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS);
LangBroadcastReceiver myBroadcastReceiver = new LangBroadcastReceiver(this, data.getStringArrayListExtra(RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES));
sendOrderedBroadcast(intent, null, myBroadcastReceiver, null, Activity.RESULT_OK, null, null);

} else {
Toast.makeText(getApplicationContext(), "Voice recognition failed.", Toast.LENGTH_LONG).show();
super.onActivityResult(requestCode, resultCode, data);

* After a voice recognition is performed, need to sent a broadcast to
* request the language used. This BroadcastReceiver gets the response and
* then processes the original recognisedText from the
public class LangBroadcastReceiver extends BroadcastReceiver {
ArrayList<String> recognisedText;
Activity parentActivity;

* Store these for later use...
* @param activity
* @param arrayList
LangBroadcastReceiver(Activity activity, ArrayList<String> arrayList) {
recognisedText = arrayList;
parentActivity = activity;

public void onReceive(Context context, Intent intent) {
Bundle results = getResultExtras(true);
String lang = results.getString(RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES);
Log.d("log", "MyBroadcastReceiver: Got 'EXTRA_LANGUAGE_PREFERENCE' = " + lang);
// now handle the recognisedText with the known language.

ArrayList<CharSequence> hints = getResultExtras(true)

Log.d("log", "MyBroadcastReceiver: Got 'EXTRA_LANGUAGE_PREFERENCE' = " + hints);



I'd like to know why this isn't working but at this point I'd be just as happy if I got the full list of currently supported languages. Tried various different methods and it's starting to annoy me now.

Thanks for any help

Answer Source

Please see my answer here, I describe how to execute RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS properly:

How to set the language in speech recognition on android?