求使用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
相关产品推荐
相关产品推荐

