You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求使用registerForActivityResult的Android语音转文本示例(替代onActivityResult)

使用registerForActivityResult实现Android语音转文本

步骤1:添加权限

在AndroidManifest.xml中添加录音权限:

<uses-permission android:name="android.permission.RECORD_AUDIO" />

步骤2:注册ActivityResultLauncher

在你的Activity或Fragment中定义用于接收语音识别结果的Launcher:

import android.app.Activity
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Bundle
import android.speech.RecognizerIntent
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.activity.result.contract.ActivityResultContracts

class SpeechToTextActivity : AppCompatActivity() {
    private lateinit var textView: TextView

    // 注册语音识别结果回调
    private val speechRecognitionLauncher = registerForActivityResult(
        ActivityResultContracts.StartActivityForResult()
    ) { result ->
        if (result.resultCode == Activity.RESULT_OK) {
            val results = result.data?.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)
            results?.firstOrNull()?.let { transcribedText ->
                textView.text = transcribedText
            }
        } else {
            Toast.makeText(this, "语音识别已取消或失败", Toast.LENGTH_SHORT).show()
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_speech_to_text)
        textView = findViewById(R.id.transcribed_text)

        // 绑定启动按钮(示例)
        findViewById<android.widget.Button>(R.id.start_recognition_btn).setOnClickListener {
            startSpeechRecognition()
        }
    }

步骤3:实现语音识别启动逻辑

添加启动语音识别的方法,并处理权限检查:

private fun startSpeechRecognition() {
        // 检查录音权限
        if (ContextCompat.checkSelfPermission(
                this,
                android.Manifest.permission.RECORD_AUDIO
            ) != PackageManager.PERMISSION_GRANTED
        ) {
            ActivityCompat.requestPermissions(
                this,
                arrayOf(android.Manifest.permission.RECORD_AUDIO),
                REQUEST_RECORD_AUDIO_PERMISSION
            )
            return
        }

        // 构建语音识别Intent
        val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {
            putExtra(
                RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                RecognizerIntent.LANGUAGE_MODEL_FREE_FORM
            )
            putExtra(RecognizerIntent.EXTRA_LANGUAGE, java.util.Locale.getDefault())
            putExtra(RecognizerIntent.EXTRA_PROMPT, "请开始说话")
        }

        try {
            speechRecognitionLauncher.launch(intent)
        } catch (e: ActivityNotFoundException) {
            Toast.makeText(this, "当前设备不支持语音识别功能", Toast.LENGTH_SHORT).show()
        }
    }

步骤4:处理权限请求结果

override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (requestCode == REQUEST_RECORD_AUDIO_PERMISSION) {
            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                startSpeechRecognition()
            } else {
                Toast.makeText(this, "需要录音权限才能使用语音识别", Toast.LENGTH_SHORT).show()
            }
        }
    }

    companion object {
        private const val REQUEST_RECORD_AUDIO_PERMISSION = 1001
    }
}

关键注意事项

  • 确保设备已安装Google语音识别服务(多数Android设备默认预装,部分定制ROM可能缺失)
  • 必须动态申请录音权限,否则会触发权限异常
  • 可通过修改RecognizerIntent的参数自定义识别行为,比如指定目标语言、设置最长识别时长等

内容的提问来源于stack exchange,提问作者ModernArt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 03:48:35