在开发自定义相机时,调用mCamera.takePicture(null, null, new Camera.PictureCallback() {} 偶现无法拍照问题。
debug发现 报了异常错误 被try{}catch(){} 捕捉了。
02-12 14:48:41.580: E/AndroidRuntime(6997): FATAL EXCEPTION: main
02-12 14:48:41.580: E/AndroidRuntime(6997): java.lang.RuntimeException: takePicture failed
02-12 14:48:41.580: E/AndroidRuntime(6997): at android.hardware.Camera.native_takePicture(Native Method)
02-12 14:48:41.580: E/AndroidRuntime(6997): at android.hardware.Camera.takePicture(Camera.java:1126)
02-12 14:48:41.580: E/AndroidRuntime(6997): at android.hardware.Camera.takePicture(Camera.java:1071)
02-12 14:48:41.580: E/AndroidRuntime(6997): at app.cam.shane.CameraLauncherActivity$3.onClick(CameraLauncherActivity.java:116)
02-12 14:48:41.580: E/AndroidRuntime(6997): at android.view.View.performClick(View.java:4223)
02-12 14:48:41.580: E/AndroidRuntime(6997): at android.view.View$PerformClick.run(View.java:17275)
02-12 14:48:41.580: E/AndroidRuntime(6997): at android.os.Handler.handleCallback(Handler.java:615)
1、定义一个变量:
private boolean safeToTakePicture = false;
2、在camera.startPreview() 后 初始化变量
camera.startPreview();
safeToTakePicture = true;
3、在 camera.takePicture()添加
if (safeToTakePicture) {
mp.start();
camera.takePicture(null, null, onPictureTaken);
safeToTakePicture = false;
}
4、在 onPictureTaken()回调的最后添加
safeToTakePicture = true;
public void takePicture(final TakePictureCallback callback) { if (isPreviewing) { try { mCamera.takePicture(null, null, new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { isPreviewing = true; Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); Matrix matrix = new Matrix(); if (SELECTED_CAMERA == CAMERA_POST_POSITION) { matrix.setRotate(nowAngle); } else if (SELECTED_CAMERA == CAMERA_FRONT_POSITION) { matrix.setRotate(360 - nowAngle); matrix.postScale(-1, 1); } bitmap = createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); if (callback != null) { if (nowAngle == 90 || nowAngle == 270) { callback.captureResult(bitmap, true); } else { callback.captureResult(bitmap, false); } } } }); } catch (Exception e) { e.printStackTrace(); } isPreviewing = false; } }
点击打开链接
点击打开链接2