我正在尝试制作一个语音通话录音应用程序。但我面临一个问题。当我开始录制时,应用程序崩溃了。它显示 MediaRecorder 启动失败:-2147483648。我现在能做什么?
在这里我使用 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);
// Set the output file path
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());
}
}
但是我在我的 android studio 日志中收到了这个错误。是的,我在移动设备中运行它,而不是在模拟器中运行。
错误是,
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)
根据文档:
从 VOICE_CALL 源捕获需要 Manifest.permission.CAPTURE_AUDIO_OUTPUT 权限。这个权限 保留供系统组件使用,不可用于 第三方应用程序。
换句话说,除非您是系统应用程序,否则您必须使用不同的源(例如VOICE_COMMUNICATION)。