Camera2 API return Camera ошибка 4 только в SDK 29 - PullRequest
1 голос
/ 12 февраля 2020

Я включил в свое приложение Android настройку камеры, исходный код основы c был получен из официального репозитория github google.

Единственным отличием является реализация ручного управления fla sh, эта реализация усложняет мою жизнь, потому что в некоторых случаях выдается исключение.

Исключение выдается в метод OnError (), который возвращает мне код ошибки «4», но только на Android ОС с SDK> = 29.

Я пытался выполнить другую отладку, но не смог найти решение, может Вы даете мне несколько советов?

private final CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() {

    @Override
    public void onOpened(@NonNull CameraDevice cameraDevice) {
        mCameraOpenCloseLock.release();
        mCameraDevice = cameraDevice;
        try {
            SurfaceTexture texture = mTextureView.getSurfaceTexture();
            assert texture != null;
            texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
            Surface surface = new Surface(texture);
            mPreviewRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
            mPreviewRequestBuilder.addTarget(surface);

            mCameraDevice.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()), new CameraCaptureSession.StateCallback() {
                @Override
                public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
                    if(mCameraDevice != null){
                        mCaptureSession = cameraCaptureSession;
                        try {
                            updateAutoFocus();
                            updateFlash(mPreviewRequestBuilder);
                            mPreviewRequest = mPreviewRequestBuilder.build();
                            mCaptureSession.setRepeatingRequest(mPreviewRequest, mCaptureCallback, mBackgroundHandler);
                        } catch (Exception e) {
                            wil.WriteFile("3)PhotoBookAuction - Exception: " + e.toString());
                        }
                    }
                }

                @Override
                public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {
                    showToast("Create preview configure failed");
                }
            }, mBackgroundHandler);
        } catch (Exception e) {
            wil.WriteFile("3)PhotoBookAuction - Exception: " + e.toString());
        }
    }

    @Override
    public void onDisconnected(@NonNull CameraDevice cameraDevice) {
        mCameraOpenCloseLock.release();
        cameraDevice.close();
        mCameraDevice = null;
    }

    @Override
    public void onError(@NonNull CameraDevice cameraDevice, int error) {
        mCameraOpenCloseLock.release();
        cameraDevice.close();
        mCameraDevice = null;
        Activity activity = getActivity();
        if (null != activity) {
            showToast("Camera is error: " + error);
            activity.finish();
        }
    }
};

UpdateFla sh Метод:

private void updateFlash(CaptureRequest.Builder requestBuilder) {
    if (mFlashSupported) {
        switch (mFlash) {
            case CameraConstants.FLASH_OFF:
                requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
                requestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
                break;
            case CameraConstants.FLASH_ON:
                requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
                requestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
                break;
            case CameraConstants.FLASH_AUTO:
                requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
                requestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
                break;
        }
    }
}
...