Код: Выделить всё
public class HiddenCamera implements SurfaceHolder.Callback,
Camera.PictureCallback, Camera.AutoFocusCallback {
private Context context;
private Camera camera;
private SurfaceView surfaceView;
public HiddenCamera(Context context) {
this.context = context;
}
public boolean takePhoto() {
try {
camera = Camera.open();
} catch (Exception cameraException) {
cameraException.printStackTrace();
return false;
}
surfaceView = new SurfaceView(context);
try {
camera.setPreviewDisplay(surfaceView.getHolder());
} catch (IOException e) {
closeCamera();
e.printStackTrace();
return false;
}
prepareCameraParameters();
camera.startPreview();
camera.autoFocus(this);
return true;
}
private void prepareCameraParameters() {
if (Build.VERSION.SDK_INT >= 8)
setDisplayOrientation();
else {
Camera.Parameters parameters = camera.getParameters();
if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
parameters.set("orientation", "portrait");
parameters.set("rotation", 90);
}
if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
parameters.set("orientation", "landscape");
parameters.set("rotation", 0);
}
camera.setParameters(parameters);
}
}
@TargetApi(8)
private void setDisplayOrientation() {
camera.setDisplayOrientation(90);
// Display display = ((WindowManager)context.getSystemService(context.WINDOW_SERVICE)).getDefaultDisplay();
// if(display.getRotation() == Surface.ROTATION_0) {
// //parameters.setPreviewSize(height, width);
// Log.d("sample", "ROTATION=0"+display.getRotation());
// camera.setDisplayOrientation(90);
// }
// if(display.getRotation() == Surface.ROTATION_90) {
// //parameters.setPreviewSize(width, height);
// Log.d("sample", "ROTATION=90"+display.getRotation());
// }
// if(display.getRotation() == Surface.ROTATION_180) {
// //parameters.setPreviewSize(height, width);
// Log.d("sample", "ROTATION=180"+display.getRotation());
// }
// if(display.getRotation() == Surface.ROTATION_270) {
// //parameters.setPreviewSize(width, height);
// camera.setDisplayOrientation(180);
// Log.d("sample", "ROTATION=270"+display.getRotation());
// }
}
private void closeCamera() {
if (camera != null) {
camera.setPreviewCallback(null);
camera.stopPreview();
camera.release();
camera = null;
}
}
@Override
public void onPictureTaken(byte[] paramArrayOfByte, Camera paramCamera) {
Image image = new Image(System.currentTimeMillis(), paramArrayOfByte);
new SaveInBackground().execute(image);
closeCamera();
}
@Override
public void onAutoFocus(boolean paramBoolean, Camera paramCamera) {
camera.takePicture(null, null, null, this);
}