在真实设备上拍照崩溃了

8

我正在使用这段代码来拍照,在模拟器上它可以正常工作。但是在真实的移动设备上无法工作,并且在三星Galaxy S4和索尼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();
}

1
请发布您的 logcat 崩溃日志。 - intrepidkarthi
我无法将我的设备连接到Eclipse,请测试我的代码。 - Milad M
1
当您能够连接时,请发布转储。我们会提供帮助。 - intrepidkarthi
1个回答

2

首先确保在清单文件中使用权限

<uses-permission android:name="android.permission.CAMERA" />

在调用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();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接