我打算使用此应用程序录制通话。但是当我将audioSource设置为MediaRecorder.AudioSource.VOICE_CALL时,它会给出错误,但是当audioSource设置为MediaRecorder.AudioSource.MIC时,它工作得很好。我不确定问题出在哪里。问题的日志如下。非常感谢任何形式的帮助。谢谢。
public class IncomingCallReceiver extends BroadcastReceiver {
private MediaRecorder mRecorder;
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if(null == bundle)
return;
String state = bundle.getString(TelephonyManager.EXTRA_STATE);
if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))
{
}
else if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK)){
Log.i("TelephonyManager", "Call picked up");
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setAudioEncodingBitRate(16);
mRecorder.setAudioSamplingRate(44100);
mRecorder.setOutputFile("/sdcard/Recording/callrecord.mp4");
try{
mRecorder.prepare();
}
catch(IOException e){
}
mRecorder.start();
Log.i("StartRecordingCall", "Recording Call end");
}
else if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)){
Log.i("TelephonyManager", "Call hunged up");
mRecorder.stop();
mRecorder.release();
mRecorder=null;
}
}
/
12-18 20:15:56.755: E/MediaRecorder(1577): start failed: -2147483648
12-18 20:15:56.755: D/AndroidRuntime(1577): Shutting down VM
12-18 20:15:56.755: W/dalvikvm(1577): threadid=1: thread exiting with uncaught exception (group=0x2b542210)
12-18 20:15:56.765: E/AndroidRuntime(1577): FATAL EXCEPTION: main
12-18 20:15:56.765: E/AndroidRuntime(1577): java.lang.RuntimeException: start failed.
12-18 20:15:56.765: E/AndroidRuntime(1577): at android.media.MediaRecorder.start(Native Method)
12-18 20:15:56.765: E/AndroidRuntime(1577): at com.example.callrecorder.MainActivity.startRecording(MainActivity.java:447)
12-18 20:15:56.765: E/AndroidRuntime(1577): at com.example.callrecorder.MainActivity.onClick(MainActivity.java:279)
12-18 20:15:56.765: E/AndroidRuntime(1577): at android.view.View.performClick(View.java:3534)
12-18 20:15:56.765: E/AndroidRuntime(1577): at android.view.View$PerformClick.run(View.java:14263)
12-18 20:15:56.765: E/AndroidRuntime(1577): at android.os.Handler.handleCallback(Handler.java:605)
12-18 20:15:56.765: E/AndroidRuntime(1577): at android.os.Handler.dispatchMessage(Handler.java:92)
12-18 20:15:56.765: E/AndroidRuntime(1577): at android.os.Looper.loop(Looper.java:137)
12-18 20:15:56.765: E/AndroidRuntime(1577): at android.app.ActivityThread.main(ActivityThread.java:4441)
12-18 20:15:56.765: E/AndroidRuntime(1577): at java.lang.reflect.Method.invokeNative(Native Method)
12-18 20:15:56.765: E/AndroidRuntime(1577): at java.lang.reflect.Method.invoke(Method.java:511)
12-18 20:15:56.765: E/AndroidRuntime(1577): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-18 20:15:56.765: E/AndroidRuntime(1577): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-18 20:15:56.765: E/AndroidRuntime(1577): at dalvik.system.NativeStart.main(Native Method)
最佳答案
您运行应用的设备可能根本不支持语音通话录音,或者不喜欢您尝试设置的一个或多个参数。
例如,您可以尝试使用 8000 Hz 采样率而不是 44100 Hz(无论如何,44100 Hz 对于 AMR-NB 来说毫无意义),并完全取消对 setAudioEncodingBitRate
的调用。
您的代码的另一个潜在问题是您的 BroadcastReceiver
对象中有 MediaRecorder
实例,但尚未将其声明为静态。以下是 Android 文档中有关 BroadcastReceiver 的说明:
A BroadcastReceiver object is only valid for the duration of the call to onReceive(Context, Intent). Once your code returns from this function, the system considers the object to be finished and no longer active.
换句话说,当您收到包含 EXTRA_STATE_IDLE
的广播时,您期望存在的 MediaRecorder
实例实际上可能不再存在,因为您位于不同的 BroadcastReceiver
实例而不是创建 MediaRecorder
的实例。
关于android - MediaRecorder启动失败-2147483648,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13933065/