Android 媒体录制:java.lang.RuntimeException:启动失败 [英] Android Media Recording: java.lang.RuntimeException: start failed
问题描述
我正在记录电话.当我开始录制电话时,不幸的是停止了.&它给出了错误 MediaRecorder 启动失败 -2147483648.我参考了这个答案链接.但我不明白.请告诉我我的代码有什么问题?这是我的代码.
I am working on records a phone calls. When i start a record a phone call then it's unfortunately stop. & it's gives error MediaRecorder start fail -2147483648. I refer this answer link. But i don't understand. Please tell me what is the problem in my code? Here is my Code.
public class IncomingCall extends BroadcastReceiver {
Context pcontext;
private static MediaRecorder recorder;
private boolean recordedStart = false;
@SuppressWarnings("unchecked")
public void onReceive(Context context, Intent intent) {
pcontext = context;
recorder = new MediaRecorder();
try {
TelephonyManager tmgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
MyPhoneStateListener PhoneListener = new MyPhoneStateListener();
tmgr.listen(PhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
} catch (Exception e) {
Log.e("Phone Receive Error", " " + e);
}
}
private class MyPhoneStateListener extends PhoneStateListener {
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
Log.e("MyPhoneListener",state+" incoming no:"+incomingNumber);
Log.e("CALL_STATE_RINGING", "CALL_STATE_RINGING");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
recorder.setOutputFile(Environment.getExternalStorageDirectory()+"/MyRecorder.mp3");
Log.e("Path", ""+Environment.getExternalStorageDirectory()+"/MyRecorder.mp3");
try {
recorder.prepare();
recorder.start();
recordedStart = true;
Log.e("Start", "Recorder Start");
} catch (IllegalStateException | IOException e) {
// TODO Auto-generated catch block
Log.e("Error", ""+e);
}
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.e("CALL_STATE_IDLE", "CALL_STATE_IDLE");
if (recordedStart == true) {
recorder.stop();
recorder.release();
recordedStart = false;
Log.e("Stop", "Recorder Stop");
}
break;
}
}
}
}
Logcat 错误
05-05 10:57:23.771: E/MediaRecorder(12812): start failed: -2147483648
05-05 10:57:23.771: D/AndroidRuntime(12812): Shutting down VM
05-05 10:57:23.771: W/dalvikvm(12812): threadid=1: thread exiting with uncaught exception (group=0x416bdd40)
05-05 10:57:23.774: E/AndroidRuntime(12812): FATAL EXCEPTION: main
05-05 10:57:23.774: E/AndroidRuntime(12812): Process: web.revolution.autocallanswer, PID: 12812
05-05 10:57:23.774: E/AndroidRuntime(12812): java.lang.RuntimeException: start failed.
05-05 10:57:23.774: E/AndroidRuntime(12812): at android.media.MediaRecorder.start(Native Method)
05-05 10:57:23.774: E/AndroidRuntime(12812): at web.revolution.autocallanswer.IncomingCall$MyPhoneStateListener.onCallStateChanged(IncomingCall.java:98)
05-05 10:57:23.774: E/AndroidRuntime(12812): at android.telephony.PhoneStateListener$2.handleMessage(PhoneStateListener.java:389)
05-05 10:57:23.774: E/AndroidRuntime(12812): at android.os.Handler.dispatchMessage(Handler.java:102)
05-05 10:57:23.774: E/AndroidRuntime(12812): at android.os.Looper.loop(Looper.java:136)
05-05 10:57:23.774: E/AndroidRuntime(12812): at android.app.ActivityThread.main(ActivityThread.java:5102)
05-05 10:57:23.774: E/AndroidRuntime(12812): at java.lang.reflect.Method.invokeNative(Native Method)
05-05 10:57:23.774: E/AndroidRuntime(12812): at java.lang.reflect.Method.invoke(Method.java:515)
05-05 10:57:23.774: E/AndroidRuntime(12812): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
05-05 10:57:23.774: E/AndroidRuntime(12812): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
05-05 10:57:23.774: E/AndroidRuntime(12812): at dalvik.system.NativeStart.main(Native Method)
05-05 10:57:25.586: I/Process(12812): Sending signal. PID: 12812 SIG: 9
05-05 10:57:27.052: E/CALL_STATE_IDLE(13255): CALL_STATE_IDLE
推荐答案
此音频源导致的问题
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
不适用于您的设备和安卓!将其更改为
not working on your device and android! change that to
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
或其他来源.
您也可以通过更改 recorderstart() 来尝试/捕获 IllegalStateException,与此相同的异常来删除 FC
also you can remove FC by change recorderstart() to try/catch with IllegalStateException,Exception same as this
try {
recorder.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
Log.d("ERROR ","IllegalStateException");
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("ERROR ","IOException");
e.printStackTrace();
}
try {
recorder.start();
} catch (Exception e) {
}
我自己也遇到过这个问题,这对于通话录音非常有用,但如果您也找到此电话的解决方案,接收器语音质量的问题会非常低.
i had this problem my self,this is working great for call recording but having problem with receiver voice quality is very low if you find solution of this tel me too.
这篇关于Android 媒体录制:java.lang.RuntimeException:启动失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!