另一个语音识别的例子

        这个例子实现的功能和上衣个基本类似,只不过识别引擎换成了Google自家的识别器了。

        讯飞的语音云主要还是在普通话方面的识别,识别英语的话就会比较坑(比如你想语音输入banana基本是不可能),Google可以识别多种语言,英语当然是毫无压力啦。

效果:





        例子中需要注意的一个问题是:startActivity(Intent)和startActivityForResult(Intent,int)的区别使用。

startActivity(Intent) 方法可以用来启动一个新的 activity ,这个 activity 将被放置在 activity 栈的栈顶。这个方法只有一个参数 Intent ,这个参数描述了将被执行的 activity 。
      有时候你希望在一个 activity 结束时得到它返回的结果。举个例子,你可能启动一个 activity 来让用户从通讯簿中选择一个人;当它结束的时候将会返回这个所选择的人。为了得到这个返回的信息,你可以使用 startSubActivity(Intent, int) 这个方法来启动新的 activity ,第二个整形参数将会作为这次调用的识别标记。这个 activity 返回的结果你可以通过 onActivityResult(int, int, String, Bundle) 方法来获得,此方法的第一个参数就是之前调用所使用的识别标记。
      当 activity 退出的时候,它可以调用 setResult(int) 来将数据返回给他的父进程。这个方法必须提供一个结果码,这个结果码可以使标准结果 RESULT_CANCELED, RESULT_OK ,也可以是其他任何从 RESULT_FIRST_USER 开始的自定义值。此外,它还可以返回一段字符串(经常是一段数据的 URL 地址),一个包含它所有希望值的 Bundle 。这些信息都会在父 activity 的回调函数 Activity.onActivityResult() 中出现,并连同最初提供的识别标记一起(此处有些拗口,意思其实就是子activity 返回的内容、返回码、识别标记都将作为参数,按照不同的返回情况来调用父activity 的Activity.onActivityResult() 方法,以实现出现各种返回时父activity 做出响应的处理)。

代码清单:

package com.example.googlevoice;  import java.util.List;  import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.speech.RecognizerIntent; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView;  public class MainActivity extends Activity implements OnClickListener{ 	private Button btn ; 	private TextView myTextView; 	private static final int REQUEST_CODE = 1; 	     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);                  btn = (Button) this.findViewById(R.id.btn);         myTextView = (TextView) this.findViewById(R.id.ResultText);                  /**          * 下面是判断当前手机是否支持语音识别功能          */         PackageManager pm = getPackageManager();         List<ResolveInfo> list = pm.queryIntentActivities(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);         if(list.size()!=0)         {         	btn.setOnClickListener(this);         }else{         	btn.setEnabled(false);         	btn.setText("当前语音识别设备不可用...");         }              }  	public void onClick(View v) { 		if(v.getId()==R.id.btn) 		{ 			/** 			 * 启动手机内置的语言识别功能 			 */ 			Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 			intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,"en-US");  //设置为当前手机的语言类型 			intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "请说话,我识别");//出现语言识别界面上面需要显示的提示 			startActivityForResult(intent,REQUEST_CODE); 		} 	}  	@Override 	protected void onActivityResult(int requestCode, int resultCode, Intent data) { 		/** 		 * 回调获取从谷歌得到的数据 		 */ 		if(requestCode==REQUEST_CODE&&resultCode==RESULT_OK) 		{ 			 			List<String> list = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 			//只选取第一个结果显示 			myTextView.setText(list.get(0)); 		} 		super.onActivityResult(requestCode, resultCode, data); 	} 	 	 	  } 

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="fill_parent"     android:layout_height="fill_parent"     android:orientation="vertical" >      <TextView         android:id="@+id/ResultText"         android:layout_width="fill_parent"         android:layout_height="wrap_content"         android:text="ResultText" />        <LinearLayout         android:id="@+id/bottom"         android:layout_width="fill_parent"         android:layout_height="wrap_content"         android:layout_alignParentBottom="true"         android:orientation="horizontal" >          <Button             android:id="@+id/btn"             android:layout_width="fill_parent"             android:layout_height="wrap_content"             android:text="GoogleVoice" />     </LinearLayout>  </RelativeLayout>


参考资料:http://blog.csdn.net/vipa1888/article/details/7023928


你可能感兴趣的:(android,Google,layout,语言,button,encoding)