I have bellow code for capturing video. At the first time this code works well but when I back from activity and choose capture video( I have a list at main which one of it choices is capture video) ,then gives me this error:java.lang.RuntimeException: Fail to connect to camera service
error. I dont know what line of my code makes this error. How I fix this problem?
protected void startRecording() throws IOException
{
mCamera.stopPreview();
mCamera.unlock();
mrec = new MediaRecorder(); // Works well
mrec.setCamera(mCamera);
mrec.setAudioSource(MediaRecorder.AudioSource.MIC);
mrec.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mrec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mrec.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mrec.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
mrec.setOutputFile(Videopath);
mrec.setPreviewDisplay(surfaceHolder.getSurface());
mrec.prepare();
isRecording=true;
mrec.start();
}
//-------------------------------------------------------------
protected void stopRecording()
{
if(mrec !=null)
try{
mrec.stop();
}catch(IllegalStateException e)
{
Log.e("try stop","Got illegal ");
}
releaseRecorder();
releaseCamera();
isRecording=false;
mCamera = Camera.open();
mCamera.lock();
surfaceView = (SurfaceView) findViewById(R.id.surface_camera);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
Parameters params = mCamera.getParameters();
mCamera.setParameters(params);
mCamera.setDisplayOrientation(90);
try {
mCamera .setPreviewDisplay(surfaceHolder);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
mCamera .startPreview();
}
//-------------------------------------------------------------
// release the recorder after recording
private void releaseRecorder() {
if( mrec!=null){
Log.v("recorder release", "recorder released");
mrec.release();
mrec=null;
}
}
//-------------------------------------------------------------
// release the camera after recording
private void releaseCamera() {
if(mCamera!=null){
try{
mCamera.reconnect();
}catch(IOException e){
e.printStackTrace();
}
Log.v("camera relese", "camera released");
mCamera.release();
mCamera=null;
}
}
//-------------------------------------------------------------
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height)
{
}
//-------------------------------------------------------------
@Override
public void surfaceCreated(SurfaceHolder holder)
{
if (mCamera != null)
{
Parameters params = mCamera.getParameters();
mCamera.setParameters(params);
mCamera.setDisplayOrientation(90);
try {
mCamera .setPreviewDisplay(holder);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
mCamera .startPreview();
}
else
{
Toast.makeText(getApplicationContext(),
"Camera not available!", Toast.LENGTH_LONG).show();
VideoRecorderActivity.this.finish();
}
}
//-------------------------------------------------------------
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
}
//-------------------------------------------------------------
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK )
{
if(isRecording)
mCamera.stopPreview();
releaseCamera();
cheshmakLamp_Off();
RecorderTimer_off();
clearTexts();
VideoRecorderActivity.this.finish();
}
return super.onKeyDown(keyCode, event);
}
//--------------------------------------------------------------
private void InitializeUI()
{
imgCheshmak=(ImageView)findViewById(R.id.imgcheshmak1);
tvName=(TextView)findViewById(R.id.tvSetNameRecorder);
tvTime=(TextView)findViewById(R.id.tvTimer1);
btnlistToggle=(Button) findViewById(R.id.btnToggleListVideo);
mCamera = Camera.open();
mCamera.lock();
surfaceView = (SurfaceView) findViewById(R.id.surface_camera);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mToggleButton = (ToggleButton) findViewById(R.id.toggleRecordingButton);
btnlistToggle.setEnabled(true);
}