zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

我的Android进阶之旅------>Android中MediaRecorder.stop()报错 java.lang.RuntimeException: stop failed.

AndroidJAVAampFailed 报错 之旅 进阶 gt
2023-09-27 14:29:23 时间

今天在调用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().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.


现在,在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

====================================================================================




Android | 音视频方向进阶路线及资源合集 但是系统相机和系统控件VideoView的局限性都是可定制型太差,系统相机的图像分辨率,视频码率以及VideoView的进度条等.
字节卷动 You will never know how excellent you are unless you impel yourself once.