android camera 2 API,LENS_FOCUS_DISTANCE始终显示为空

时间:2019-05-03 12:32:04

标签: android-camera2

在尝试使用Google的Camera2Basic示例应用程序时,我希望锁定自动对焦模式后的对焦距离值。 锁定后,代码将调用CaptureStillPicture()函数。我需要获取LENS_FOCUS_DISTANCE值,但它始终返回null。 这是CaptureStillPicture()函数:

        private void CaptureStillPicture(){
        try {
            final Activity activity = getActivity();
            if (null == activity || null == mCameraDevice) {
                return;
            }

            final CaptureRequest.Builder captureBuilder =
                    mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
            captureBuilder.addTarget(mImageReader.getSurface());


            captureBuilder.set(CaptureRequest.CONTROL_AF_MODE,
                    CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
            setAutoFlash(captureBuilder);


            int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
            captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOrientation(rotation));

            CameraCaptureSession.CaptureCallback CaptureCallback
                    = new CameraCaptureSession.CaptureCallback() {
                //Here's where I want the focus distance.
                //TotalCaptureResult class can give the focus distance value
                @Override
                public void onCaptureCompleted(@NonNull CameraCaptureSession session,
                                               @NonNull CaptureRequest request,
                                               @NonNull TotalCaptureResult result) {
                    showToast("Saved: " + mFile);
                    //This value, while debugging shows null :
                    Float focus_distance = result.get(result.LENS_FOCUS_DISTANCE);
                    Log.d(TAG, mFile.toString());
                    unlockFocus();
                }
            };

            mCaptureSession.stopRepeating();
            mCaptureSession.abortCaptures();
            mCaptureSession.capture(captureBuilder.build(), CaptureCallback, null);
        } catch (CameraAccessException e) {
            e.printStackTrace();
          }
         }
        }

以下是调用此功能的代码:

        private CameraCaptureSession.CaptureCallback mCaptureCallback
            = new CameraCaptureSession.CaptureCallback() {

          private void process(CaptureResult result) {

            if (CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED == afState ||
                            CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED == afState) {

                        Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE);
                        if (aeState == null ||
                                aeState == CaptureResult.CONTROL_AE_STATE_CONVERGED) {
                            mState = STATE_PICTURE_TAKEN;
                            captureStillPicture();
                        } else {
                            runPrecaptureSequence();
                        }
                    } }}

这里出了什么问题?

我已经尝试过this,但是我没有得到0,我得到了空值。 我有与this相同的问题,但没有我能理解的答案。

0 个答案:

没有答案