2016-02-18 48 views
4

在我的相机应用程序中,我有一个按钮可将相机朝前或朝后改变,我可以使用后置相机捕捉和保存图像,但是当我切换到前置相机时,我无法捕捉图像。这是我如何切换相机前面或后面。相机2 - API - 使用前置摄像头时,图像捕捉不起作用?

ImageView switch_camera =(ImageView) rootview.findViewById(R.id.imageView7); 
     switch_camera.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


     //  facing = characteristics.get(CameraCharacteristics.LENS_FACING); 

       if (facing != null && facing == CameraCharacteristics.LENS_FACING_FRONT) { 
        //isfrontcam=true; 
        try { 

         //manager.openCamera(getBackFacingCameraId(manager), mStateCallback, mBackgroundHandler); 
         closeCamera(); 
         openCamera(mTextureView.getWidth(), mTextureView.getHeight(),"0"); 
         Log.e("opening ","BackCam"); 
         facing = 1; 

        } catch (SecurityException e) { 
         e.printStackTrace(); 

        } catch (Exception e) { 
         e.printStackTrace(); 

        } 
       } else if (facing != null && facing == CameraCharacteristics.LENS_FACING_BACK) { 
        // isfrontcam = true; 
        try { 
         //manager.openCamera(getFrontFacingCameraId(manager), mStateCallback, mBackgroundHandler); 

         // characteristics = manager.getCameraCharacteristics("1"); 

         closeCamera(); 
         openCamera(mTextureView.getWidth(), mTextureView.getHeight(),"1"); 

         Log.e("opening ", "FrontCam"); 
         String str = getBackFacingCameraId(manager); 
         facing= 0; 
         Log.e("str", "id" + str); 

        } catch (SecurityException e) { 
         e.printStackTrace(); 

        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 

在捕获按钮点击,我打电话这个功能捕获图像;

private void lockFocus() { 
     try { 
      // This is how to tell the camera to lock focus. 
      mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, 
        CameraMetadata.CONTROL_AF_TRIGGER_START); 
      // Tell #mCaptureCallback to wait for the lock. 
      mState = STATE_WAITING_LOCK; 
      mCaptureSession.capture(mPreviewRequestBuilder.build(),mCaptureCallback, 
        mBackgroundHandler); 
     } catch (CameraAccessException e) { 

      e.printStackTrace(); 
     } 
    } 

回答

11

检查CameraCaptureSession.CaptureCallback: 可能是相机的状态CONTROL_AF_STATE_INACTIVE。而且,因为它正在等待焦点......照片永远不会被拍摄。

它应该是这样的

  case STATE_WAITING_LOCK: { 
       Integer afState = result.get(CaptureResult.CONTROL_AF_STATE); 
       if (afState == null) { 
        captureStillPicture(); 
       } else if (CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED == afState || 
         CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED == afState || 
         CaptureResult.CONTROL_AF_STATE_INACTIVE == afState /*add this*/) { 
        // CONTROL_AE_STATE can be null on some devices 
        Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE); 
        if (aeState == null || aeState == CaptureResult.CONTROL_AE_STATE_CONVERGED) { 
         mState = STATE_PICTURE_TAKEN; 
         captureStillPicture(); 
        } else { 
         runPrecaptureSequence(); 
        } 
       } 
       break; 
      } 
+0

为我工作:)感谢 –

+0

也许你知道如何解决我的问题,我怎么能拍摄照片只有当相机对焦?有我的问题http://stackoverflow.com/questions/40185407/how-to-take-picture-only-if-image-in-focus-camera-2-api在此先感谢! –

+1

这个答案允许我在标准模拟器中运行Camera2basic示例。谢谢 :) – Isolin