拍照在真实设备上崩溃

Mil*_*d M 8 crash android image

我正在使用此代码拍照,在模拟器中它正常工作.它不适用于物理移动设备,并且在Samsung Galaxy S4和Sony Xperia Z2上出错.

我的代码:

private void takePicture() {
    openCamera();
    camera.takePicture(new ShutterCallback() {
        @Override
        public void onShutter() {
        }
    }, new PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
        }
    }, new PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,data.length);
            img_screenshot.setImageBitmap(bitmap);
            closeCamera();
        }
    });
}

private void openCamera() {
    camera = Camera.open();
    Camera.Parameters params = camera.getParameters();
    List<Size> sizes = params.getSupportedPictureSizes();
    Size mSize = sizes.get(0);
    params.setPictureSize(mSize.width, mSize.height);
    camera.setParameters(params);
}

private void closeCamera() {
    camera.release();
}
Run Code Online (Sandbox Code Playgroud)

小智 2

首先确保清单中的使用权限

<uses-permission android:name="android.permission.CAMERA" />
Run Code Online (Sandbox Code Playgroud)

之后,在调用 takePicture 之前,调用 startPreview,如下所示:

private void takePicture() {
    openCamera();
    camera.startPreview();
    camera.takePicture(new ShutterCallback() {

        @Override
        public void onShutter() {
        }
    }, new PictureCallback() {

        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
        }
    }, new PictureCallback() {

        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,data.length);
            img_screenshot.setImageBitmap(bitmap);
            closeCamera();
        }
    });
}

private void openCamera() {
    camera = Camera.open();
    Camera.Parameters params = camera.getParameters();
    List<Size> sizes = params.getSupportedPictureSizes();
    Size mSize = sizes.get(0);
    params.setPictureSize(mSize.width, mSize.height);
    camera.setParameters(params);
}

private void closeCamera() {
    camera.release();
}
Run Code Online (Sandbox Code Playgroud)