无法使用前置摄像头拍摄图像:Android

无法使用前置摄像头拍摄图像:Android,android,android-camera,Android,Android Camera,我不能用前置相机拍照。我的测试设备肯定具有前后摄像头/功能。由于某些原因,照片只能用后置相机拍摄。这是我的。注:摄像机和参数是全局设置的 @Override public void surfaceCreated(SurfaceHolder holder) { camera = Camera.open(); parameter = camera.getParameters(); Camera.Size size

我不能用前置相机拍照。我的测试设备肯定具有前后摄像头/功能。由于某些原因,照片只能用后置相机拍摄。这是我的。注:摄像机和参数是全局设置的

@Override
   public void surfaceCreated(SurfaceHolder holder)
   {

            camera = Camera.open();
            parameter = camera.getParameters();

            Camera.Size size = getBestPreviewSize(surfaceView.getWidth(), surfaceView.getHeight(), parameter);
            parameter.setPreviewSize(size.width, size.height);

            try {
                camera.setPreviewDisplay(surfaceHolder);
            } catch (Throwable ignored) {
                Log.e(TAG, "set preview error: ", ignored);
            }
            camera.setParameters(parameter);

        }  
    }
surfaceChanged()
中,我启动相机预览

@Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
                               int height)
    {
        // TODO Auto-generated method stub
        if(isPreview == true)
        {
            camera.stopPreview();
            isPreview = false;
        }

        if (camera != null)
        {
            try
            {

                camera.setPreviewDisplay(surfaceHolder);
                camera.setDisplayOrientation(90);
camera.startPreview();
                isPreview = true;
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
surfaceDestroyed()
中,我释放相机资源

@Override
   public void surfaceDestroyed(SurfaceHolder holder)
   {
       if (camera != null) {
           camera.stopPreview();

           camera.release();
           camera = null;
           isPreview = false; 
       }

   }
以下是返回预览大小的引用方法

private Camera.Size getBestPreviewSize(int width, int height,
                                           Camera.Parameters parameters) {
        Camera.Size result = null;

        for (Camera.Size size : parameters.getSupportedPreviewSizes()) {
            if (size.width <= width && size.height <= height) {
                if (result == null) {
                    result = size;
                } else {
                    int resultArea = result.width * result.height;
                    int newArea = size.width * size.height;

                    if (newArea > resultArea) {
                        result = size;
                    }
                }
            }
        }

        this.size = result;
        return (result);
    }
我使用
findFrontFacingCamera()
方法检查前脸摄像头

private int findFrontFacingCamera() {
        cameraId = -1;
        //search for the front facing camera
        int numberOfCameras = Camera.getNumberOfCameras();
        for (int i = 0; i<numberOfCameras; i++) {
            CameraInfo cInfo = new CameraInfo();
            Camera.getCameraInfo(i, cInfo);
            if (cInfo.facing == CameraInfo.CAMERA_FACING_FRONT) {
                Log.d(TAG, "Front Camera found");
                cameraId = i;
                break;
            }
        }
        return cameraId;
    }
private int findFrontFacingCamera(){
cameraId=-1;
//搜索前向摄像头
int numberOfCameras=Camera.getNumberOfCameras();

对于(int i=0;i不要使用
.open()
。使用
.open(cameraID)
并将前向摄像头的摄像头id传递给它。

我明白你的意思。但我的问题是。此应用程序的一般用途是后向摄像头。前向摄像头的使用(自拍)这只是一个功能。我想我要寻找的是一种更新相机参数的方法,而不是为前向相机创建一个新的相机对象(应用程序从后向相机开始,在surfaceCreated中).有什么建议吗?没有。我所知道的获取前置摄像头的唯一方法是使用open并将正确的id传递给它。设置参数不会改变它使用的摄像头,当你拥有一个摄像头对象时,你已经选择了要使用的硬件。明白了。我相信这对我来说已经足够了,可以让它正常工作。谢谢
private int findFrontFacingCamera() {
        cameraId = -1;
        //search for the front facing camera
        int numberOfCameras = Camera.getNumberOfCameras();
        for (int i = 0; i<numberOfCameras; i++) {
            CameraInfo cInfo = new CameraInfo();
            Camera.getCameraInfo(i, cInfo);
            if (cInfo.facing == CameraInfo.CAMERA_FACING_FRONT) {
                Log.d(TAG, "Front Camera found");
                cameraId = i;
                break;
            }
        }
        return cameraId;
    }