編輯:關於Android編程
一、准備工作
1、你需要android手機應用開發基礎
2、科大訊飛語音識別SDK android版
3、科大訊飛語音識別開發API文檔
4、android手機
關於科大訊飛SDK及API文檔,請到科大語音官網下載:http://www.xfyun.cn/
當然SDK和API有多個版本可選,按照你的需要下載,其次,下載需要填寫資料申請注冊,申請通過或可獲得Appid
如下圖,申請一個APPID,就可以了。
二、語音識別流程
1、創建識別控件
函數原型
Public RecognizerDialog(Context context,String params)
其中Context表示當前上下文環境,傳this即可
Params有參數詳見API文檔
2、用Appid登錄到科大訊飛服務器(自動連接,需要聯網)
主要用到SpeechUser(com.iflytek.speech包下)類下的getUser().login()函數
其中getUser()表示獲取用戶對象,可以實現用戶登錄,注銷等操作
Login函數原型
Public boolean login(Context context,String usr,String pwd,String
參數詳見API文檔
3、讀取語言識別語法
詳見API文檔
4、設置識別參數及識別監聽器
通過RecognizerDialog下的setEngine()方法設置參數
函數原型
public void setEngine(String engine,String params,String grammar)
詳細的參數請參考API文檔
5、識別結果回調
需要實現RecognizerDialogListener接口,其中有兩個方法需要重寫,分別是
1)public void onResults(ArrayList<RecognizerResult> results,boolean isLast)
其中result是RecognizerResult對象的集合,RecognizerResult的屬性有
String text 識別文本
Int confidence 識別可信度
2)public void onEnd(SpeechError error)
6、識別結果處理(自行處理)
自己將文本進行處理。
三、詳細開發過程
1、新建Android項目
和普通的android項目一樣,只是需要加入科大訊飛語言SDK包,主要包括
Msc.jar及libmsc.so動態庫文件,項目lib截圖
2、布局
這裡只進行簡單的布局,只設置一個按鈕作為語言識別按鈕及一個文本組件用作顯示識別結果,布局文件如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" tools:context="${relativePackage}.${activityClass}" > <EditText android:id="@+id/editText" android:layout_width="fill_parent" android:layout_height="300dp" android:gravity="top" android:inputType="textMultiLine" > <requestFocus /> </EditText> <Button android:id="@+id/button_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="點擊開始說話" /> </LinearLayout>
3、Main.java代碼如下:
public class Main extends Activity { // 組件 private Button button = null; private TextView result = null; private Toast mToast = null; // 語音識別 private final String APP_ID = "這裡改成自己的APP_ID"; private RecognizerDialog recognizerDialog = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.main); button = (Button) super.findViewById(R.id.button_start); result = (TextView) super.findViewById(R.id.editText); // 初始化識別 mToast = Toast.makeText(this, "", Toast.LENGTH_SHORT); mToast.setMargin(0f, 0.2f); recognizerDialog = new RecognizerDialog(this, "appid=" + APP_ID); SpeechUser.getUser().login(this, null, null, "appid=" + APP_ID, loginListener); this.button.setOnClickListener(new Btn()); } private class Btn implements OnClickListener { @Override public void onClick(View v) { //MainActivity.this.voice.setImageResource(R.drawable.voicelight); recognizerDialog.setListener(mRecoListener); recognizerDialog.setEngine(null, "grammar_type=abnf", grammarText); recognizerDialog.show(); } } // 語音識別用戶登錄監聽器 private SpeechListener loginListener = new SpeechListener() { @Override public void onData(byte[] arg0) { } @Override public void onEvent(int arg0, Bundle arg1) { } @Override public void onEnd(SpeechError arg0) { // TODO Auto-generated method stub if (arg0 != null) { mToast.setText("登錄失敗"); mToast.show(); } else { mToast.setText("登錄成功"); mToast.show(); } } }; // 識別結果回調 private RecognizerDialogListener mRecoListener = new RecognizerDialogListener() { @Override public void onEnd(SpeechError error) { //MainActivity.this.voice.setImageResource(R.drawable.voice); } @Override public void onResults(ArrayList<RecognizerResult> results, boolean isLast) { // TODO Auto-generated method stub String text = ""; text = results.get(0).text; mToast.setText("識別結果為:" + text); mToast.show(); result.setText("識別結果為:" + text); } }; }
4、需要的權限:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
5、結果截圖:
以上就是本文的全部內容了,希望小伙伴們能夠喜歡。
1 -- Volley簡介Android開發團隊也是意識到了有必要將HTTP的通信操作再進行簡單化,於是在2013年Google I/O大會上推出了一個新的網絡通信框架&
OpenglES2.0 for Android:各種變換來一波 監聽屏幕事件 在進行各種變換之前,我們先來了解一下如何監聽屏幕的事件。我們下面的變換都需要用立方體來演示,
Dagger2是一款最初由Square公司研發,後交由Google進行維護管理的依賴注入(Dependency Injection DI)框架。我想之所以其越來越受歡迎,
PS:用了一下個推.感覺實現第三方應用的推送功能還是比較簡單的.官方文檔寫的也非常的明確.學習內容:1.使用個推實現第三方應用的推送.所有的配置我最後會給一個源代碼,內部