捕获单张图像并返回父级后释放相机实例activity

Releasing camera instance after a single image is captured and returning to parent activity

我正在尝试调用 camera 实例,捕获图像并 return 到父 activity。我能够创建和调用 camera 实例,捕获并存储图像,但是带有相机的 activity 不会退出。

Preview activity 创建相机实例并实现 onPause()onResume()resetCam() 等方法。代码是:

        //capture button
        buttonClick.setOnClickListener(new OnClickListener(){
                        public void onClick(View v) {
                            camera.takePicture(shutterCallback, rawCallback, pngCallback);
                       }
        }


    protected void onResume() {
            super.onResume();
            int numCams = Camera.getNumberOfCameras();
            if(numCams > 0){
                try{
                    camera = Camera.open(0);
                    camera.startPreview();
                    preview.setCamera(camera);
                } catch (RuntimeException ex){
                    Toast.makeText(ctx, getString(R.string.camera_not_found), Toast.LENGTH_LONG).show();
                }
            }
        }

        @Override
        protected void onPause() {
            if(camera != null) {
                camera.stopPreview();
                preview.setCamera(null);
                camera.release();
                camera = null;
            }
            super.onPause();
        }

        private void resetCam() {
            camera.startPreview();
            preview.setCamera(camera);
        }

ShutterCallback shutterCallback = new ShutterCallback() {
        public void onShutter() {
            }
    };

    PictureCallback rawCallback = new PictureCallback() {
        public void onPictureTaken(byte[] data, Camera camera) {
            }
    };

    PictureCallback pngCallback = new PictureCallback() {
            public void onPictureTaken(byte[] data, Camera camera) {

//save the iamge here

                resetCam();

            Log.d(TAG, "onPictureTaken - png");
        }
    };

在单个捕获事件之后,控件应该 returned 到父 activity PhotoCapture,它通过以下方式调用 Preview

Intent intent = new Intent(PhotoCapture.this,Preview.class);
                startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);

并执行相同的 onActivityResult()

我应该如何释放 camera 实例以安全退出?

我也想return图片保存的路径

谢谢!

编辑:

我试着调用 finish();这样:

    buttonClick.setOnClickListener(new OnClickListener()
            {
                public void onClick(View v) {
                    camera.takePicture(shutterCallback, rawCallback, pngCallback);
                    Log.d("Tag","4");
                    finish();
                }
            });

我把 Log.d() 用于获取控制流:

ShutterCallback shutterCallback = new ShutterCallback() {
        public void onShutter() {
                Log.d("Tag","1");
        }
    };

    PictureCallback rawCallback = new PictureCallback() {
        public void onPictureTaken(byte[] data, Camera camera) {
            Log.d("Tag","2");
        }
    };

    PictureCallback pngCallback = new PictureCallback() {
        public void onPictureTaken(byte[] data, Camera camera) {
            Log.d("Tag","3");
            //save image
            resetCam();
            Log.d(TAG, "onPictureTaken - png");
        }
    };

日志是:

02-19 14:00:28.046    4680-4680/preview.preview D/Tag﹕ 4
02-19 14:00:38.414    4680-4686/preview.preview W/Camera﹕ Camera server died!

Tag:1 或标记:2 或标记:3 没有日志!

因此 activity 在实际图像 captured/stored 之前完成。

即使我设置了(result_code=OK)图像也没有保存。

我该如何解决这个问题?

拍完照片后调用 finish(),它将退出当前 activity,您将返回到之前的 activity。

要完成 activity,您必须在开始 activity 之后使用 finish() 方法,或者您可以在开始 activity.

之前将标志包含到意图中

当您拍照并准备好 return 拨打电话 activity 时,您必须拨打此代码

setResult(RESULT_OK);

然后

finish();

这将 return 以 resultCode = RESULT_OK

呼叫 activity