class AIActivity : AppCompatActivity() { private lateinit var binding: ActivityAiactivityBinding private lateinit var adapter: ChatAdapter private val messages = mutableListOf<ChatMessage>()
companion object { private const val REQUEST_RECORD_AUDIO = 100 private const val REQ_SPEECH = 101 }
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityAiactivityBinding.inflate(layoutInflater) setContentView(binding.root)
// 接收语音识别结果,填入 editText override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == REQ_SPEECH && resultCode == Activity.RESULT_OK) { val results = data ?.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS) val text = results?.firstOrNull().orEmpty() // 直接填充到输入框 binding.editTextMessage.setText(text) } }
private fun sendMessage() { val text = binding.editTextMessage.text.toString().trim() if (text.isNotEmpty()) { messages.add(ChatMessage(text, true)) adapter.notifyItemInserted(messages.lastIndex) binding.recyclerViewMessages.scrollToPosition(messages.lastIndex) binding.editTextMessage.text?.clear()
class RecordDialogFragment( private val onResult: (String) -> Unit ) : DialogFragment(), RecognitionListener {
private lateinit var recognizer: SpeechRecognizer private lateinit var ivMic: ImageView private lateinit var volumeBar: ProgressBar private lateinit var tvHint: TextView
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val view = LayoutInflater.from(context).inflate(R.layout.dialog_record, null) ivMic = view.findViewById(R.id.ivMic) volumeBar = view.findViewById(R.id.volumeBar) tvHint = view.findViewById(R.id.tvHint)
override fun onResults(results: Bundle?) { val list = results?.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION) val text = list?.firstOrNull().orEmpty() onResult(text) dismiss() }
override fun onPartialResults(partialResults: Bundle?) { // 可选:显示中间识别结果 }
override fun onBufferReceived(buffer: ByteArray?) {} override fun onEvent(eventType: Int, params: Bundle?) {} override fun onDestroy() { super.onDestroy() recognizer.destroy() } }