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

MediaRecorder启动失败报错-2147483648,通话录音APP崩溃求助

问题:通话录音APP启动录音时崩溃,提示MediaRecorder start failed: -2147483648

场景与核心代码

开发通话录音APP时使用MediaRecorder类,实体设备运行时触发崩溃,核心实现代码如下:

public void startRecord(){        
    String error = "";        
    mediaRecorder = new MediaRecorder();        
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);        
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);        
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);        
    mediaRecorder.setAudioEncodingBitRate(16);        
    mediaRecorder.setAudioSamplingRate(44100);

    // 设置输出文件路径        
    String outputFilePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/test.mp3" ;        
    System.out.println(outputFilePath);        
    mediaRecorder.setOutputFile(outputFilePath);

    try {
        mediaRecorder.prepare();            
        mediaRecorder.start();            
        mediaRecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() {                
            @Override                
            public void onError(MediaRecorder mediaRecorder, int i, int i1) {                    
                System.out.println(mediaRecorder);                    
                System.out.println(i);                    
                System.out.println(i1);                
            }            
        });            
        error = "Start Record";
    } catch (IOException e) {            
        e.printStackTrace();            
        error = e.getMessage();            
        System.out.println(e.getMessage());
    }
}

错误日志

start failed: -2147483648
2023-10-15 23:05:21.957  1750-1750  AndroidRuntime          com.team71.callrecording             D  Shutting down VM
2023-10-15 23:05:21.962  1750-1750  AndroidRuntime          com.team71.callrecording             E  FATAL EXCEPTION: main                                                                                                    Process: com.team71.callrecording, PID: 1750                                                                                                    java.lang.RuntimeException: start failed.                                                                                                        at android.media.MediaRecorder.start(Native Method)                                                                                                        at com.team71.callrecording.StartRecording.startRecord(StartRecording.java:34)                                                                                                        at com.team71.callrecording.MainActivity$2.onClick(MainActivity.java:60)                                                                                                        at android.view.View.performClick(View.java:7505)                                                                                                        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1213)                                                                                                        at android.view.View.performClickInternal(View.java:7477)                                                                                                        at android.view.View.access$3600(View.java:824)                                                                                                        at android.view.View$PerformClick.run(View.java:28652)                                                                                                        at android.os.Handler.handleCallback(Handler.java:938)                                                                                                        at android.os.Handler.dispatchMessage(Handler.java:99)                                                                                                        at android.os.Looper.loop(Looper.java:257)                                                                                                        at android.app.ActivityThread.main(ActivityThread.java:8218)                                                                                                        at java.lang.reflect.Method.invoke(Native Method)                                                                                                        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:626)                                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1016)
解决方案

1. 权限检查与适配

  • 确保已申请并授予以下权限,Android 6.0+需动态申请:
    • RECORD_AUDIO:基础录音权限
    • READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE(Android 13+用READ_MEDIA_AUDIO替代):文件读写权限
    • READ_PHONE_STATE:部分机型获取通话音频源的必要权限
  • 注意:VOICE_CALL音频源在部分Android版本或国产ROM中被厂商限制,若无法使用,可降级为VOICE_COMMUNICATION或MIC作为替代方案。

2. 修复音频参数不兼容问题

  • 格式与后缀不匹配:输出格式设为MPEG_4,但文件后缀是.mp3,将文件名改为test.m4a,或把输出格式改为MediaRecorder.OutputFormat.THREE_GPP(对应.3gp)
  • 比特率设置错误:setAudioEncodingBitRate(16)数值过小,AMR_NB标准比特率为12200左右,建议改为128000(通用音频比特率)
  • 采样率与编码器冲突:AMR_NB不支持44100Hz采样率,改为8000Hz(AMR_NB标准采样率);若需保留44100Hz,将编码器改为MediaRecorder.AudioEncoder.AAC

3. 调整代码逻辑

  • 提前设置错误监听器:当前在start()后设置监听器,无法捕获启动时的错误,需移至prepare()之前:
    mediaRecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() {
        @Override
        public void onError(MediaRecorder mediaRecorder, int i, int i1) {
            Log.e("RecorderError", "Error code: " + i + ", extra: " + i1);
        }
    });
    mediaRecorder.prepare();
    mediaRecorder.start();
    
  • 规范文件路径处理:避免直接拼接字符串,用File类确保路径有效性:
    File outputFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "test.m4a");
    mediaRecorder.setOutputFile(outputFile.getAbsolutePath());
    

4. 适配系统与机型限制

  • Android 10及以上版本,VOICE_CALL音频源可能被系统限制,可尝试使用MediaProjection API(需用户授权屏幕录制权限,可间接捕获通话音频)
  • 部分国产ROM(如小米、华为)需在系统设置中单独开启APP的通话录音权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:41:04