package
com.example.camera_test;
import
android.app.Activity;
import
android.content.Context;
import
android.hardware.Camera;
import
android.hardware.Camera.CameraInfo;
import
android.hardware.Camera.PictureCallback;
import
android.hardware.Camera.PreviewCallback;
import
android.hardware.Camera.ShutterCallback;
import
android.os.Bundle;
import
android.view.SurfaceHolder;
import
android.view.SurfaceView;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.FrameLayout;
import
java.io.FileOutputStream;
public
class
CameraActivity
extends
Activity {
private
Preview pv;
private
Button btn;
private
FrameLayout fl;
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
pv =
new
Preview(
this
);
fl = (FrameLayout) findViewById(R.id.preview);
fl.addView(pv);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(
new
OnClickListener() {
public
void
onClick(View v) {
pv.getCamera().takePicture(shutterCallback, rawCallback,
jpegCallback);
}
});
}
ShutterCallback shutterCallback =
new
ShutterCallback() {
public
void
onShutter() {
}
};
PictureCallback rawCallback =
new
PictureCallback() {
public
void
onPictureTaken(
byte
[] data, Camera camera) {
}
};
PictureCallback 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();
}
catch
(Exception e) {
e.printStackTrace();
}
}
};
class
Preview
extends
SurfaceView
implements
SurfaceHolder.Callback {
private
SurfaceHolder mHolder;
private
Camera camera;
Preview(Context context) {
super
(context);
mHolder = getHolder();
mHolder.addCallback(
this
);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public
Camera getCamera() {
return
camera;
}
public
void
surfaceCreated(SurfaceHolder holder) {
try
{
int
cameraId = findFrontSideCamera();
camera = Camera.open(cameraId);
camera.setPreviewDisplay(holder);
camera.setPreviewCallback(
new
PreviewCallback() {
public
void
onPreviewFrame(
byte
[] data, Camera camera) {
}
});
}
catch
(Exception e) {
e.printStackTrace();
}
}
public
void
surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera =
null
;
}
public
void
surfaceChanged(SurfaceHolder holder,
int
format,
int
w,
int
h) {
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(w, h);
camera.setParameters(parameters);
camera.startPreview();
}
}
private
int
findFrontSideCamera() {
int
cameraId = -
1
;
int
numberOfCameras = Camera.getNumberOfCameras();
for
(
int
i =
0
; i < numberOfCameras; i++) {
CameraInfo cmInfo =
new
CameraInfo();
Camera.getCameraInfo(i, cmInfo);
if
(cmInfo.facing == CameraInfo.CAMERA_FACING_FRONT) {
cameraId = i;
break
;
}
}
return
cameraId;
}
}