我正在打电话记录.当我开始记录电话时,不幸的是停止了.&它的错误MediaRecorder启动失败-2147483648.我参考这个答案链接.但我不明白.请告诉我我的代码中有什么问题?这是我的代码.
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
小智.. 12
此音频源导致此问题
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
没有在您的设备和Android上工作!改变为
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
或其他来源.
你也可以通过change recorderderstart()删除FC来尝试/ catch使用IllegalStateException,异常与此相同
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) { }
我有自己的这个问题,这对于通话记录非常有用,但是如果你找到这个电话的解决方案,那么接收器语音质量的问题是非常低的.