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

Kotlin开发录音计时App点击暂停触发IllegalStateException崩溃求助

问题原因

1. 变量赋值语法错误(直接导致if分支未按预期执行、崩溃)

你给recordingStopped变量赋值时误用了双等号==(比较运算符),而非赋值运算符=,导致变量值从未被修改:

  • pauseRecording方法中的recordingStopped == true没有实际赋值效果,recordingStopped永远保持初始值false
  • resumeRecording方法中的recordingStopped == false同样没有生效
    后续第二次点击暂停按钮时,程序依然会走到调用mediaRecorder?.pause()的分支,但此时MediaRecorder已经处于暂停状态,再次调用pause就会触发IllegalStateException,就是你遇到的崩溃。

2. MediaRecorder实例被意外重置,配置完全丢失

你在savefilename()方法中执行了mediaRecorder = MediaRecorder(),直接把onCreate阶段已经配置好音频参数、输出路径的有效实例替换成了全新的未初始化实例,新实例没有经过setAudioSource、setOutputFormat等必要配置,状态完全异常,调用任何录音相关方法都会触发崩溃。

3. 系统版本兼容风险

MediaRecorder的pause()/resume()方法仅支持Android 7.0(API 24)及以上系统,若在低于该版本的设备上运行,也会直接抛出异常。

修复方案
  1. 修正赋值语法
    将pauseRecording方法中的recordingStopped == true改为recordingStopped = true
    将resumeRecording方法中的recordingStopped == false改为recordingStopped = false

  2. 删除多余的MediaRecorder重置代码
    删掉savefilename()方法中的mediaRecorder = MediaRecorder()行,避免覆盖已经配置完成的实例。

  3. 增加版本和状态校验
    修改pauseRecording方法,调用pause前增加判断逻辑,避免状态异常:

@SuppressLint("RestrictedApi", "SetTextI18n")
@TargetApi(Build.VERSION_CODES.N)
private fun pauseRecording() {
    if(state) {
        pauseTimer()
        Toast.makeText(this,"This is working", Toast.LENGTH_SHORT).show()
        if(!recordingStopped){
            Toast.makeText(this,"Stopped!", Toast.LENGTH_SHORT).show()
            // 增加版本判断和非空校验
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && mediaRecorder != null) {
                mediaRecorder?.pause()
            }
            recordingStopped = true
            button_pause_recording.text = "Resume"
        }else{
            resumeRecording()
            resumeTimer()
        }
    }else{
        Toast.makeText(this,"this is not working", Toast.LENGTH_SHORT).show()
    }
}
  1. 调整初始化逻辑
    将onCreate中MediaRecorder的参数配置逻辑移到startRecording方法内,每次启动录音前重新配置参数,避免状态混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:21:02