5分鐘讓你的Android App加入語音辨識(Kotlin和Java)

時間不多了,晚點再解釋!

貼上程式碼
按下Ctrl+O複寫onActivityResult方法
Shift+F10 (執行的快捷鍵)
大喊「我肚子餓」
系統辨識中...
成功!

好啦開玩笑的~

語音辨識這部分自己慢慢鑿輪子真的會有很長的路
真的推薦直接用Google已經花費大錢調教好的
我使用Kotlin講解,但是會補上Java的程式碼

首先貼上程式碼...
這是Google寫好的,直接呼叫Google的意圖(Intent)執行就可以了...
private fun displaySpeechRecognizer() {
val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {
putExtra(
RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM
)
}
startActivityForResult(intent, SPEECH_REQUEST_CODE)
}
會發現倒數第二行有問題
再貼上這行
private val SPEECH_REQUEST_CODE = 0
startActivityForResult是在說呼叫特定頁面並等待結束後要回來告訴我你們結束了,
要給個這次行動的秘密代號,這裡秘密代號為0。

然後在onCreate方法中加上下面這行,讓App一開始跑就會被呼叫
displaySpeechRecognizer()




使用快捷鍵Ctrl+O複寫onActivityResult方法
(彈出視窗後直接輸入名稱後用方向鍵往下就是了)


override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == SPEECH_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
val spokenText: String? =
data?.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS).let { results ->
results?.get(0)
}
Toast.makeText(this,spokenText,Toast.LENGTH_SHORT).show()
}
}
在裡面判斷說如果秘密代號和語音辨識的秘密代號相同,並且任務成功,那麼就取得語音辨識的文字
用一個Toast在這個頁面顯示文字出來

點選執行後就會出現語音辨識,對著他大喊「我肚子餓了」


等待辨識成功後就會出現Toast裡面有讀取到的文字


這樣可以做什麼用呢?讓我們加入上一篇使用特定連結呼叫Line開啟指定頁面提到的開啟Line錢包,
只要文字當中有出現「肚子餓」的這幾個關鍵字,就會自動跳轉頁面開啟Line錢包
加入以下程式碼
if (spokenText?.indexOf("肚子餓") != -1) {
intent = Intent()
intent = Intent.parseUri("https://line.me/R/nv/more", Intent.URI_INTENT_SCHEME)//錢包
startActivity(intent);
}
完整程式碼


再次點選執行,可以隨便亂喊,只要文字當中包含「肚子餓」就好了
自動開啟頁面後看到裡面 個位數 的餘額是不是都嚇飽了呢?

Java程式碼

public class MainActivity extends AppCompatActivity {

private int SPEECH_REQUEST_CODE = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

displaySpeechRecognizer();
}

private void displaySpeechRecognizer() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
startActivityForResult(intent, SPEECH_REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SPEECH_REQUEST_CODE && resultCode == RESULT_OK) {
List<String> results = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
String spokenText = results.get(0);
Toast.makeText(this,spokenText,Toast.LENGTH_SHORT).show();
if(spokenText.indexOf("肚子餓")!=-1){
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://line.me/R/nv/more"));
startActivity(intent);

}
}
}
}

5分鐘系列總共出了3篇
之前聽到有人說「套用人家寫好的東西誰不會?」「這麼簡單還要你教?」
是沒錯啦,可是我希望引起部分人的興趣,讓想學的人能夠「開始」

有興趣也可以看看其他幾篇
感謝您的閱讀!

留言

張貼留言

如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com