package com.example.android.foldercamera; import android.hardware.Camera; /** * Created by Andrew on 10/2/2015. */ public class CameraCallback { private final int ROTATION_HEAD_TO_LEFT = 0; private final int ROTATION_PROTRAIT = 90; private final int ROTATION_HEAD_TO_RIGHT = 180; OrientationChangeDetector mOrientationChangeDetector; PictureSave pictureSave; public CameraCallback(PictureSave pictureSave, OrientationChangeDetector orientationChangeDetector) { mOrientationChangeDetector = orientationChangeDetector; this.pictureSave = pictureSave; } public Camera.PictureCallback jpeg = new Camera.PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { // Bitmap bmp = pictureSave.save(data); // imageView1.setImageBitmap(bmp); //需要手動重新startPreview,否則停在拍下的瞬間 pictureSave.save(data); camera.startPreview(); } }; public Camera.AutoFocusCallback autoFocusCallback_without_takePicture = new Camera.AutoFocusCallback(){ @Override public void onAutoFocus(boolean success, Camera camera) { } }; public Camera.AutoFocusCallback autoFocusCallback_with_takePicture = new Camera.AutoFocusCallback() { public void onAutoFocus(boolean success, Camera camera) { if (success) { //對焦成功才拍照 int orientation = mOrientationChangeDetector.getOrientation(); switch(orientation){ case OrientationChangeDetector.HEAD_PORTRIAT: orientation = ROTATION_PROTRAIT; break; case OrientationChangeDetector.HEAD_TO_LEFT: orientation = ROTATION_HEAD_TO_LEFT; break; case OrientationChangeDetector.HEAD_TO_RIGHT: orientation = ROTATION_HEAD_TO_RIGHT; break; } Camera.Parameters params = camera.getParameters(); params.setRotation(orientation); camera.setParameters(params); camera.takePicture(null, null, jpeg); } } }; }