繁体   English   中英

Android无法在表面视图中切换到前置摄像头

[英]Android unable to switch to front camera in surface view

我试图在表面视图中打开前置摄像头,但结果是无法连接到摄像头服务

试过的代码

    mCamera= Camera.open(cameraId);

CAMERA_FACING_BACK为0

CAMERA_FACING_FRONT为1

解决办法是什么..?

是的,我得到了答案

    reverseCamera.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            boolean hasFront = hasFrontCamera();
            if (hasFront) {
                reverseCamera.setVisibility(View.VISIBLE);
                mCamera.stopPreview();
                mCamera.release();

                if (currentCameraId == Camera.CameraInfo.CAMERA_FACING_BACK) {
                    currentCameraId = Camera.CameraInfo.CAMERA_FACING_FRONT;
                } else {
                    currentCameraId = Camera.CameraInfo.CAMERA_FACING_BACK;
                }
                mCamera = Camera.open(currentCameraId);

                setCameraDisplayOrientation(MainActivity.this, currentCameraId, mCamera);
                try {

                    mCamera.setPreviewDisplay(mHolder);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                mCamera.startPreview();
            } else {
                reverseCamera.setVisibility(View.GONE);
            }
        }

    });

    public static void setCameraDisplayOrientation(Activity activity,
                                               int cameraId, android.hardware.Camera camera) {
    android.hardware.Camera.CameraInfo info =
            new android.hardware.Camera.CameraInfo();
    android.hardware.Camera.getCameraInfo(cameraId, info);
    int rotation = activity.getWindowManager().getDefaultDisplay()
            .getRotation();
    int degrees = 0;
    switch (rotation) {
        case Surface.ROTATION_0:
            degrees = 0;
            break;
        case Surface.ROTATION_90:
            degrees = 90;
            break;
        case Surface.ROTATION_180:
            degrees = 180;
            break;
        case Surface.ROTATION_270:
            degrees = 270;
            break;
    }

    int result;
    if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
        result = (info.orientation + degrees) % 360;
        result = (360 - result) % 360;  // compensate the mirror
    } else {  // back-facing
        result = (info.orientation - degrees + 360) % 360;
    }
    camera.setDisplayOrientation(result);
}

您可以附加AndroidManifest.xml文件吗?

也许您忘记了添加使用摄像头的权限。

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

更多信息,您可以参加相机课

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM