Android媒体logging器停止失败

我遇到了一个非常奇怪的行为:有时我的媒体logging器崩溃的错误“停止失败”,有时它工作正常。 有我的错,还是系统的错误? 我不知道什么是错的。

private void stopRecording(){ ticker.cancel(); ticker.purge(); recorder.stop(); startBtn.setText("Start"); recordInProcess = false; markList = locWriteTask.getMarkArray(); mCamera.lock(); recorder.release(); } private void startRecording(){ startBtn.setText("Stop"); recordInProcess = true; recorder = new MediaRecorder(); mCamera.unlock(); recorder.setCamera(mCamera); recorder.setPreviewDisplay(mSurfaceHolder.getSurface()); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); recorder.setMaxDuration((int) 10000000); recorder.setVideoSize(320, 240); recorder.setVideoFrameRate(15); recorder.setOutputFile(FULL_PATH_TO_LOCAL_FILE + counter + MP4); try{ recorder.prepare(); } catch (Exception e){ finish(); } lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll); ticker = new Timer(); locWriteTask = new WriteTimeLocationTimerTask(ll); ticker.schedule(locWriteTask, 0, DELAY); recorder.start(); } 

Solutions Collecting From Web of "Android媒体logging器停止失败"

如果录音机不处于录音状态,则停止可能失败。

请参阅http://developer.android.com/reference/android/media/MediaRecorder.html

您可能会在MediaRecorder.stop()方法中捕获RuntimeException。

例:

 MediaRecorder mRecorder = new MediaRecorder(); File mFile = new File("The output file's absolutePath"); ... //config the mRecorder mRecorder.setOutputFile(mFile.getAbsolutePath()); ... //prepare() ... mRecorder.start(); try { mRecorder.stop(); } catch(RuntimeException e) { mFile.delete(); //you must delete the outputfile when the recorder stop failed. } finally { mRecorder.release(); mRecorder = null; } 

在SurfaceCreated(SurfaceHolder持有者)中添加以下内容:

 CamcorderProfile camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); //get your own profile Camera.Parameters parameters = mCamera.getParameters(); parameters.setPreviewSize(camcorderProfile.videoFrameWidth,camcorderProfile.videoFrameHeight); mCamera.setParameters(parameters); 

遇到同样的错误: 有时我的MediaRecorder崩溃了一个错误“停止失败”,有时它工作正常。 添加这个解决了我的问题:

 @Override public void onStop() { super.onStop(); if (mRecorder != null) { mRecorder.release(); mRecorder = null; } }