public class Home extends BaseActivity implements SurfaceHolder.Callback{
Camera camera;
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
PictureCallback jpegCallback;
protected void onCreate(Bundle savedInstanceState) {
surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
target = (Button) findViewById(R.id.target);
target1 = (Button) findViewById(R.id.target1);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
// deprecated setting, but required on Android versions prior to 3.0surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
FileOutputStream outStream = null;
try {
outStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis()));
outStream.write(data);
outStream.close();
Log.d("Log", "onPictureTaken - wrote bytes: " + data.length);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
//Toast.makeText(getApplicationContext(), "Picture Saved", Toast.LENGTH_LONG).show();
refreshCamera();
}
};
}
public void refreshCamera() {
if (surfaceHolder.getSurface() == null) {
// preview surface does not exist
return;
}
// stop preview before making changes
try {
camera.stopPreview();
} catch (Exception e) {
// ignore: tried to stop a non-existent preview }
// set preview size and make any resize, rotate or
// reformatting changes here // start preview with new settings
try {
camera=Camera.open(getFrontCameraId());
camera.setDisplayOrientation(90);
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
} catch (Exception e) {
}
}
private int getFrontCameraId(){
int camId = -1;
int numberOfCameras = Camera.getNumberOfCameras();
Camera.CameraInfo ci = new Camera.CameraInfo();
for(int i = 0;i < numberOfCameras;i++){
Camera.getCameraInfo(i,ci);
if(ci.facing == Camera.CameraInfo.CAMERA_FACING_FRONT){
camId = i;
}
}
return camId;
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// Now that the size is known, set up the camera parameters and begin
// the preview.
camera.startPreview();
}
public void surfaceCreated(SurfaceHolder holder) {
try {
// open the camera
camera=Camera.open(getFrontCameraId());
} catch (RuntimeException e) {
// check for exceptions
System.err.println(e);
return;
}
// Camera.Parameters param;//
param = camera.getParameters();////
// modify parameter//
param.setPreviewSize(352, 500);//
camera.setParameters(param);
Camera.Parameters mParameters = camera.getParameters();
Camera.Size bestSize = null;
List<Camera.Size> sizeList = camera.getParameters().getSupportedPreviewSizes();
bestSize = sizeList.get(0);
for(int i = 1; i < sizeList.size(); i++){
if((sizeList.get(i).width * sizeList.get(i).height) > (bestSize.width * bestSize.height)){
// bestSize = sizeList.get(i); }
}
mParameters.setPreviewSize(bestSize.width, bestSize.height);
camera.setParameters(mParameters);
try {
// The Surface has been created, now tell the camera where to draw
// the preview.
camera.setPreviewDisplay(surfaceHolder);
camera.setDisplayOrientation(90);
camera.startPreview();
} catch (Exception e) {
// check for exceptions System.err.println(e);
return;
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
// stop preview and release camera camera.stopPreview();
camera.release();
camera = null;
}
}