另一個Android語音識別的例子

jopen 12年前發布 | 38K 次閱讀 Android Android開發 移動開發

        這個例子實現的功能和上衣個基本類似,只不過識別引擎換成了Google自家的識別器了。

        訊飛的語音云主要還是在普通話方面的識別,識別英語的話就會比較坑(比如你想語音輸入banana基本是不可能),Google可以識別多種語言,英語當然是毫無壓力啦。

效果:

另一個Android語音識別的例子


另一個Android語音識別的例子


        例子中需要注意的一個問題是: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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!