Android 安卓摄像头在拍照后开始活动

Android 安卓摄像头在拍照后开始活动,android,android-intent,android-camera,Android,Android Intent,Android Camera,我正在创建一个可以预览相机的小应用程序,点击屏幕可以保存图像 我的问题是,当图像被保存时,我想开始不同的活动,这些活动将进行预览,并在上面有一些工具。但我所做的一切活动都不会开始 这是我的密码 public class CameraActivity extends Activity { private SurfaceView preview = null; private SurfaceHolder previewHolder = null; private Camera

我正在创建一个可以预览相机的小应用程序,点击屏幕可以保存图像

我的问题是,当图像被保存时,我想开始不同的活动,这些活动将进行预览,并在上面有一些工具。但我所做的一切活动都不会开始

这是我的密码

public class CameraActivity extends Activity {
    private SurfaceView preview = null;
    private SurfaceHolder previewHolder = null;
    private Camera camera = null;
    private boolean inPreview = false;
    private boolean cameraConfigured = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.camera);

        preview = (SurfaceView) findViewById(R.id.preview);

        Button button = (Button) findViewById(R.id.button_capture);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (camera != null) {
                    camera.takePicture(null, null, photoCallback);
                    onPause();
                    Intent intent = new Intent(CameraActivity.this, PreviewAndSaveActivity.class);

                    intent.putExtra("image", "");
                    CameraActivity.this.startActivity(intent);
                }
            }
        });

        previewHolder = preview.getHolder();
        previewHolder.addCallback(surfaceCallback);
        previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    @Override
    public void onResume() {
        super.onResume();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
            Camera.CameraInfo info = new Camera.CameraInfo();

            for (int i = 0; i < Camera.getNumberOfCameras(); i++) {
                Camera.getCameraInfo(i, info);

                if (info.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
                    camera = Camera.open(i);
                }
            }
        }

        if (camera == null) {
            camera = Camera.open();
        }

        startPreview();
    }

    @Override
    public void onPause() {
        if (camera != null) {
            if (inPreview) {
                camera.stopPreview();
            }

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

        super.onPause();
    }

    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;
                    }
                }
            }
        }

        return (result);
    }

    private Camera.Size getSmallestPictureSize(Camera.Parameters parameters) {
        Camera.Size result = null;

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

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

        return (result);
    }

    private void initPreview(int width, int height) {
        if (camera != null && previewHolder.getSurface() != null) {
            try {
                camera.setPreviewDisplay(previewHolder);
            } catch (Throwable t) {
                Log.e("PreviewDemo-surfaceCallback",
                        "Exception in setPreviewDisplay()", t);
                Toast.makeText(CameraActivity.this, t.getMessage(),
                        Toast.LENGTH_LONG).show();
            }

            if (!cameraConfigured) {
                Camera.Parameters parameters = camera.getParameters();
                Camera.Size size = getBestPreviewSize(width, height, parameters);
                Camera.Size pictureSize = getSmallestPictureSize(parameters);


                if (size != null && pictureSize != null) {
                    parameters.setPreviewSize(size.width, size.height);
                    parameters.setPictureSize(pictureSize.width,
                            pictureSize.height);
                    parameters.setPictureFormat(ImageFormat.JPEG);
                    parameters.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
                    camera.setParameters(parameters);

                    cameraConfigured = true;
                }
            }
        }
    }

    private void startPreview() {
        if (cameraConfigured && camera != null) {
            camera.startPreview();
            inPreview = true;
        }
    }

    SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
        public void surfaceCreated(SurfaceHolder holder) {
            // no-op -- wait until surfaceChanged()
        }

        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                int height) {
            initPreview(width, height);
            startPreview();
        }

        public void surfaceDestroyed(SurfaceHolder holder) {


        }
    };

    Camera.PictureCallback photoCallback = new Camera.PictureCallback() {
        public void onPictureTaken(byte[] data, Camera camera) {
            camera.takePicture(null, null, new PhotoHandler(
                    getApplicationContext()));
            camera.startPreview();
            inPreview = true;
        }
    };

}
有什么建议我做错了什么吗?

试试下面的代码:

(替换按钮单击侦听器)

在CameraActivity中,添加此回调方法以在图像保存后重定向另一个活动:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 100) {
        // start you new activity from here...
    }
    super.onActivityResult(requestCode, resultCode, data);
}
button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (camera != null) {
                camera.takePicture(null, null, photoCallback);
                onPause();
                Intent intent = new Intent(CameraActivity.this, PreviewAndSaveActivity.class);

                intent.putExtra("image", "");
                CameraActivity.this.startActivityForResult(intent, 100);
            }
        }
    });
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 100) {
        // start you new activity from here...
    }
    super.onActivityResult(requestCode, resultCode, data);
}