简体   繁体   中英

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

RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES

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.app.Activity;
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. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    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);
}


@Override
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
 * ACTION_RECOGNIZE_SPEECH Intent.
 * 
 */
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;
  }

  @Override
  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)
             .getCharSequenceArrayList(
                     RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES);

     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

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?

You might be interested in this little library: https://github.com/Kaljurand/speechutils

In particular, the class RecognitionServiceManager queries all the installed speech recognition services for all the languages that they support.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM