Take a picture on a real device

I use this code to take photos, and it works correctly in the emulator. It does not work on physical mobile devices and has a bug on the Samsung Galaxy S4 and Sony Xperia Z2.

my code is:

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(); } 
+8
android image crash
source share
1 answer

first be sure to use permission in the manifest

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

then, before calling takePicture, call startPreview as follows:

 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(); } 
+2
source share

All Articles