說一句話, 對於 Android 來說, 可能產出多個段落,
一個段落, 可能包含多個字組,
一個字組, 可能包含多個字元,
如下圖所示 :

以下是 Android 語音辨識範的詳細說明與範例,
程式碼
public class HelloWorld extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView( R.layout.main );
Button button = (Button)findViewById( R.id.button);
// 判斷裝置是否有支援語音辨識功能的 App, 若沒有則失效之
PackageManager pm = getPackageManager();
List activities = pm.queryIntentActivities( new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if( activities.size() == 0 )
button.setEnabled( false );
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
// 不知道從哪個版本之後, 語音辨識需要【網路有通】才能進行
// 判斷有無連接網路, 若沒有, 則不允許進行語音輸入
ConnectivityManager cm = (ConnectivityManager)getSystemService(getBaseContext().CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if( info == null || !info.isConnected() )
{
return;
}
try {
// ACTION_RECOGNIZE_SPEECH: 透過 Android 內建語音辨識
// ACTION_WEB_SEARCH: 透過外掛的語音辨識 App
Intent intent = new Intent( RecognizerIntent.ACTION_RECOGNIZE_SPEECH );
intent.putExtra( RecognizerIntent.EXTRA_LANGUAGE_MODEL
, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM
);
// 設定語音辨識的語系
intent.putExtra( RecognizerIntent.EXTRA_LANGUAGE, Locale.CHINESE.toString() );
// 回傳語音辨識有多少結果段落 (沒有設定, 回傳全部段落)
//intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);
// 語音提示文字 (替換成您喜歡的文字)
intent.putExtra( RecognizerIntent.EXTRA_PROMPT
, "請說 ..."
);
startActivityForResult( intent, 0 );
}
catch (ActivityNotFoundException e) {
// 如果沒有安裝具有語音辨識 Activity 的時候,顯示錯誤訊息
Toast.makeText( HelloWorld.this
, "找不到語音辨識 App !!"
, Toast.LENGTH_LONG
).show();
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if( requestCode == 0 && resultCode == RESULT_OK )
{
String resultsString = "";
// 取得 STT 語音辨識的結果段落
ArrayList results = data.getStringArrayListExtra( RecognizerIntent.EXTRA_RESULTS );
// 語音辨識的每個段落
for( int i = 0; i < results.size(); i++ )
{
// 一個段落可拆解為多個字組
String[] resultWords = results.get(i).split(" ");
for( int j = 0; j < resultWords.length; j++ )
{
resultsString += resultWords[j] + ":";
}
}
// 顯示結果
Toast.makeText( this, resultsString, Toast.LENGTH_LONG ).show();
}
super.onActivityResult( requestCode, resultCode, data );
}
}
