gpt4 book ai didi

android - MediaRecorder 启动失败 -2147483648

转载 作者:搜寻专家 更新时间:2023-11-01 09:02:38 25 4
gpt4 key购买 nike

我打算使用此应用程序对通话进行录音。但是当我将 audioSource 设置为 MediaRecorder.AudioSource.VOICE_CALL 时,它给出了一个错误,但是当 audioSource 设置为 MediaRecorder.AudioSource.MIC 时,它工作得很好。我不确定问题出在哪里。问题的 logcat 如下。非常感谢任何形式的帮助。谢谢。

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 文档中关于 BroadcastReceivers 的内容:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com