今天在调用MediaRecorder.stop(),报错了,java.lang.RuntimeException: stop failed.
E/AndroidRuntime(7698): Cause by: java.lang.RuntimeException: stop failed. E/AndroidRuntime(7698): at android.media.MediaRecorder.stop(Native Method) E/AndroidRuntime(7698): at com.tintele.sos.VideoRecordService.stopRecord(VideoRecordService.java:298)
报错代码如下:
if (mediarecorder != null) { mediarecorder.stop(); mediarecorder.release(); mediarecorder = null; if (mCamera != null) { mCamera.release(); mCamera = null; } }
stop()方法源代码如下:
/** * Stops recording. Call this after start(). Once recording is stopped, * you will have to configure it again as if it has just been constructed. * Note that a RuntimeException is intentionally thrown to the * application, if no valid audio/video data has been received when stop() * is called. This happens if stop() is called immediately after * start(). The failure lets the application take action accordingly to * clean up the output file (delete the output file, for instance), since * the output file is not properly constructed when this happens. * * @throws IllegalStateException if it is called before start() */ public native void stop() throws IllegalStateException;
源代码中说了:Note that a RuntimeException is intentionally thrown to the application, if no valid audio/video data has been received when stop() is called. This happens if stop() is called immediately after start().
现在,在mediarecorder.stop();这一句报错了,现在在mediarecorder.stop();这句之前加几句就不会报错了
mediarecorder.setOnErrorListener(null);
mediarecorder.setOnInfoListener(null);
mediarecorder.setPreviewDisplay(null);
改后代码如下:
if (mediarecorder != null) { //added by ouyang start try { //下面三个参数必须加,不加的话会奔溃,在mediarecorder.stop(); //报错为:RuntimeException:stop failed mediarecorder.setOnErrorListener(null); mediarecorder.setOnInfoListener(null); mediarecorder.setPreviewDisplay(null); mediarecorder.stop(); } catch (IllegalStateException e) { // TODO: handle exception Log.i("Exception", Log.getStackTraceString(e)); }catch (RuntimeException e) { // TODO: handle exception Log.i("Exception", Log.getStackTraceString(e)); }catch (Exception e) { // TODO: handle exception Log.i("Exception", Log.getStackTraceString(e)); } //added by ouyang end mediarecorder.release(); mediarecorder = null; if (mCamera != null) { mCamera.release(); mCamera = null; } }
====================================================================================
作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:http://blog.csdn.net/ouyang_peng
====================================================================================
版权声明:本文为欧阳鹏原创文章,欢迎转载,转载请注明出处http://blog.csdn.net/ouyang_peng