Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android自定义摄像头在第一次拍摄后没有响应_Android_Camera - Fatal编程技术网

Android自定义摄像头在第一次拍摄后没有响应

Android自定义摄像头在第一次拍摄后没有响应,android,camera,Android,Camera,最近,我制作了一个用于测试目的的定制相机应用程序,我遇到了一个看似简单但对我来说很难解决的小问题。 问题是,当我点击按钮拍摄快照时,相机在第一次尝试时成功捕获了照片,但是,当我第二次点击按钮时,相机根本没有响应,没有崩溃,但无法拍摄照片 我已经在下面设置了示例代码,我想知道我实现的一些代码是否有一些结构错误,或者我只是一个做一些离题的事情的noob preview = new Preview(this, (SurfaceView) findViewById

最近,我制作了一个用于测试目的的定制相机应用程序,我遇到了一个看似简单但对我来说很难解决的小问题。 问题是,当我点击按钮拍摄快照时,相机在第一次尝试时成功捕获了照片,但是,当我第二次点击按钮时,相机根本没有响应,没有崩溃,但无法拍摄照片 我已经在下面设置了示例代码,我想知道我实现的一些代码是否有一些结构错误,或者我只是一个做一些离题的事情的noob

    preview = new Preview(this,
                (SurfaceView) findViewById(R.id.CameraFragment));
        FrameLayout frame = (FrameLayout) findViewById(R.id.preview);
        frame.addView(preview);
        preview.setKeepScreenOn(true);
        fotoButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                try {
                    //take the picture 
                    takeFocusedPicture();

                } catch (Exception e) {

                }
                // exitButton.setClickable(false);
                fotoButton.setClickable(false);
                // progressLayout.setVisibility(View.VISIBLE);

            }
        });
    }


    @Override
    protected void onResume() {
        super.onResume();
        // TODO Auto-generated method stub
        if (camera == null) {
            camera = Camera.open();
            camera.startPreview();
            camera.setErrorCallback(new ErrorCallback() {
                public void onError(int error, Camera mcamera) {

                    camera.release();
                    camera = Camera.open();
                    Log.d("Camera died", "error camera");

                }
            });
        }
        if (camera != null) {
            if (Build.VERSION.SDK_INT >= 14)
                setCameraDisplayOrientation(context,
                        CameraInfo.CAMERA_FACING_BACK, camera);
            preview.setCamera(camera);
        }
    }


//This method allows you to take the image after the camera autofocuses
    Camera.AutoFocusCallback mAutoFocusCallback = new Camera.AutoFocusCallback() {
        @Override
        public void onAutoFocus(boolean success, Camera camera) {

            try {
                // camera.takePicture(mShutterCallback, null, jpegCallback);
                shutter(); // Method one shutt(1)
            } catch (Exception e) {

            }

        }
    };



    //This method will activate the shutter class 
    public void shutter() {
        //passies the auto focus listener  parameter = 2 
        this.camera.autoFocus(this.mAutofocusListener);
    }


    private Camera.AutoFocusCallback mAutofocusListener = new Camera.AutoFocusCallback() {

        @Override
        public void onAutoFocus(boolean success, Camera camera) {
            // camera.autoFocus(null); Takes the picture after the device succeeds in auto focus 

            //passes in two methos as a parameter 
             //First parameter  = 3 Second paramter = 4 
            camera.takePicture(mShutterListener, null, mPictureListener);
        }
    };


    private Camera.ShutterCallback mShutterListener = new Camera.ShutterCallback() {

        @Override
        public void onShutter() {

        }
    };

    //method for the picture callback parameter = 4
    private Camera.PictureCallback mPictureListener = new Camera.PictureCallback() {


        //I think you better alter this part 
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
//returns the image data as a byte
            //if image data exists 
        //  if (data != null) {
                camera.startPreview();

                //passes in the byte data into the makeRotateImage function to rotate the image that has been taken 
                makeRotateImage(mOwner, data, 512 * 512); //maximum pixel willl be 262144

            //}
        }
    };

    public void takeFocusedPicture() {
        //sets up the mAutoFocusCallback method as a parameter 
        camera.autoFocus(mAutoFocusCallback);

    }

拍摄完照片后,刷新您的surfaceview并停止预览并释放相机,然后再次重新启动该过程

@Override
public void onPictureTaken(byte[] data, Camera camera) {
    try {
        camera.stopPreview();
    } catch (Exception e) {
        // ignore: tried to stop a non-existent preview
    }
    camera.setPreviewDisplay("Our SurfaceView Holder");
    camera.startPreview();
}

我正在尝试您的示例,但问题是我必须在setPreviewDisplay中设置什么?如果您看到上面的代码,我将使用自定义类预览来扩展ViewGroup实现SurFaceHolder.Callback。在这种情况下,我必须做什么?