how fix this exception on android : Fail to connect to camera service

点点圈 提交于 2019-12-12 01:43:19

问题


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);
 }

来源:https://stackoverflow.com/questions/20898733/how-fix-this-exception-on-android-fail-to-connect-to-camera-service

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!