I use the following code to invoke the voice recognizer by google:
// This is a demonstration of Android's built in speech recognizer
package com.example.voiceinputbuiltintest;
import java.util.ArrayList;
import java.util.Locale;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.speech.RecognizerIntent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final int VOICE_RECOGNITION = 1;
Button speakButton ;
TextView spokenWords;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
speakButton = (Button) findViewById(R.id.button1);
spokenWords = (TextView)findViewById(R.id.textView1);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
protected void onActivityResult(int requestCode,
int resultCode,
Intent data) {
if (requestCode == VOICE_RECOGNITION && resultCode == RESULT_OK) {
ArrayList<String> results;
results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
// TODO Do something with the recognized voice strings
Toast.makeText(this, results.get(0), Toast.LENGTH_SHORT).show();
spokenWords.setText(results.get(0));
}
super.onActivityResult(requestCode, resultCode, data);
}
public void btnSpeak(View view){
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
// Specify free form input
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,"Please start speaking");
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.ENGLISH);
startActivityForResult(intent, VOICE_RECOGNITION);
}
}
This works without network connection in my test machine which is Nexus 7 with Android 4.3. I thought it would work the same on any android device. However, when I try it on Samsung Galaxy S2 with Android version gingerbread.el21, the voice recogniser activity shows up, but says it needs network connection and refuses to work. Why does it work in Nexus 7 and not in Galaxy S2? Does it work offline or does it need network connection? It works in the Nexus 7 even when I stop the wifi.