掌上快遞1.4.0(http://app.xiaomi.com/detail/61427)將要更新,新增語音輸入訂單號功能。java
語音輸入集成的是科大訊飛的SDK,簡單的實現了語音轉換爲文字的過程,固然科大訊飛還提供了不少接口用來實現更加複雜的語音識別系統。android
佈局文件 :app
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_horizontal" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="0dip" > <EditText android:id="@+id/txt_result" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textSize="20sp" android:paddingBottom="40dip" android:gravity="top|left" android:editable="false" /> </RelativeLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:id="@+id/bt_search" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:text="開始說話" > </Button> </LinearLayout> </LinearLayout>
mainActivity 註釋很詳細,再也不贅述,不明白的能夠留言一塊兒學習。ide
package com.test.demo; import java.util.ArrayList; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import com.iflytek.speech.RecognizerResult; import com.iflytek.speech.SpeechConfig.RATE; import com.iflytek.speech.SpeechError; import com.iflytek.ui.RecognizerDialog; import com.iflytek.ui.RecognizerDialogListener; public class HelloDemoActivity extends Activity implements OnClickListener { protected static final String TAG = "ThirdActivity"; private EditText txt_result; private RecognizerDialog rd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.demo); findView(); //RecognizerDialog(Context context, String params); "appid=1234567,usr=test,pwd=12345" usr、pwd不是必選的 //建立語音識別dailog對象,appid到訊飛就註冊獲取 rd = new RecognizerDialog(this ,"appid=此處填你申請到的ID"); } private void findView() { txt_result = (EditText) findViewById(R.id.txt_result); findViewById(R.id.bt_search).setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt_search: showReconigizerDialog(); break; default: break; } } private void showReconigizerDialog() { //setEngine(String engine,String params,String grammar); /** * 識別引擎選擇,目前支持如下五種 「sms」:普通文本轉寫 「poi」:地名搜索 「vsearch」:熱詞搜索 「vsearch」:熱詞搜索 「video」:視頻音樂搜索 「asr」:命令詞識別 params 引擎參數配置列表 附加參數列表,每項中間以逗號分隔,如在地圖搜索時可指定搜索區域:「area=安徽省合肥市」,無附加參數傳null */ rd.setEngine("sms", null, null); //設置採樣頻率,默認是16k,android手機通常只支持8k、16k.爲了更好的識別,直接弄成16k便可。 rd.setSampleRate(RATE.rate16k); final StringBuilder sb = new StringBuilder(); Log.i(TAG, "識別準備開始............."); //設置識別後的回調結果 rd.setListener(new RecognizerDialogListener() { @Override public void onResults(ArrayList<RecognizerResult> result, boolean isLast) { for (RecognizerResult recognizerResult : result) { sb.append(recognizerResult.text); Log.i(TAG, "識別一條結果爲::"+recognizerResult.text); } } @Override public void onEnd(SpeechError error) { Log.i(TAG, "識別完成............."); txt_result.setText(sb.toString()); Log.i(TAG, "識別完成:"+txt_result.getText().toString()); } }); txt_result.setText(""); //先設置爲空,等識別完成後設置內容 rd.show(); } }
提幾個須要注意的地方:佈局
1,若是用的是ADT開發的朋友,請鏈接真機測試,由於語音識別須要進行錄音。學習
2,科大訊飛的ID請到科大訊飛(http://open.voicecloud.cn/)的開放平臺進行申請,前提你先有一個提供有語音接口的APP,上傳APP後會給你一個未經審覈的APPID,這個ID天天的訪問次數限制爲500次。若是想不限次訪問,可提交APP進行審批,工做人員會聯繫你進行確認信息,通常1-3天就能夠審批經過。測試