和 iOS 的 Speech 類似, Android 也有自己的一套語音識別工具 android.speech
通過將語音轉換成文字的功能,我們可以再將文字轉換成命令。
使用 Inent 來使用內建的語音識別功能,然後通過 intent.putExtra 來帶入一些資訊。
private fun startVoiceRecognitionActivity() {
val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Please say something")
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 5)
startActivityForResult(intent, voiceRecognitionRequestCode)
}
語音輸入介面會提示的文字內容,這裡寫了 Please say something
語音識別後可以拿到多個結果,排越前面精準度越高,來一個例子:
startActivityForResult(intent, voiceRecognitionRequestCode)
通過剛才設定好的 Flag 來判斷是語音識別請求的結果,並提取識識別後的內容。
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if(requestCode == voiceRecognitionRequestCode && resultCode == Activity.RESULT_OK){
val matches = data!!.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)
// 語音識別會有多個結果,第一個是最精確的
val text = matches.first()
voiceTextView.setText(text)
updateTextViewWithText(text)
}
super.onActivityResult(requestCode, resultCode, data)
}