1
我尝试写的Android应用程序,需要从谷歌语音API返回的字符串,并用它来发送到其他对象“levenshte.testLevenshteindistance”代码,相同的内线。如何成为保证谷歌语音API返回值 - java的
的问题,我不能让它成为同步的工作! 我的意思是我的代码调用谷歌语音API返回值之前对象“依赖于互联网的速度”?
ublic class MainActivity extends Activity {
public ListView sList;
ArrayList<String> names;
int sfound;
mp3Player mp3Player;
Levenshteindistance levenshte;
public static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
voiceinputbuttons();
starVoiceRecognation();
}
private void starVoiceRecognation() {
Thread timer = new Thread(){
public void run(){
new VoiceRecognizer().execute();
//names is an ArrayList returnd by google speech api
sfound=levenshte.testLevenshteindistance(names.get(0).toString());
}
};timer.start();
}
public void voiceinputbuttons() {
sList = (ListView) findViewById(R.id.list);
//default value if create mp3player before set sName or rName or actionNumbe
names=null;
levenshte = new Levenshteindistance();
}
public void informationMenu() {
startActivity(new Intent("android.intent.action.INFOSCREEN"));
}
public void startVoiceRecognitionActivity() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,"Speech recognition demo");
try {
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
} catch (ActivityNotFoundException e) {
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {
// i want the timer thread wait until assign a value to this name variable
names = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
if (names.contains("information")) {
informationMenu();
}
super.onActivityResult(requestCode, resultCode, data);
}
}
private class VoiceRecognizer extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... url1) {
startVoiceRecognitionActivity();
return null;
}
}
}
我想肯定的是,名称不为空调用levenshte.testLevenshteindistance时(names.get(0)的ToString());
对不起,我需要更多的解释! – Arwa 2013-04-09 14:32:48
我可以如何使它在doInBackground函数内? – Arwa 2013-04-19 19:14:47
你没有。语音识别由另一个应用程序处理。 YOu调用startActivity来启动它,当它完成时它会调用onActivityResult。 – 2013-04-19 20:13:34