<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
只需将CameraSurfacePreview 类 add到UI中即可
package com.example.atestlocationcamera;
import java.io.IOException;
import android.content.Context;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class CameraSurfacePreview extends SurfaceView implements
SurfaceHolder.Callback {
private static final String TAG = CameraSurfacePreview.class.getSimpleName();
private SurfaceHolder mHolder;
private Camera mCamera;
public CameraSurfacePreview(Context context) {
super(context);
mHolder = getHolder();
mHolder.addCallback(this);
// // deprecated setting, but required on Android versions prior to 3.0
// mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
Log.d("Dennis", "surfaceCreated() is called");
try {
// Open the Camera in preview mode
int numberOfCameras = Camera.getNumberOfCameras();
Log.e(TAG, "");
mCamera = Camera.open(0);
if(mCamera != null) {
mCamera.setPreviewDisplay(holder);
} else {
Log.e("TAG", "CAMERA NULL NULL!!!!!!!!!");
}
} catch (IOException e) {
Log.d("Dennis", "Error setting camera preview: " + e.getMessage());
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
Log.d("Dennis", "surfaceChanged() is called");
try {
if(null != mCamera){
mCamera.startPreview();
}
} catch (Exception e){
Log.d("Dennis", "Error starting camera preview: " + e.getMessage());
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (mCamera != null) {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
Log.d(TAG, "surfaceDestroyed() is called");
}
public void takePicture(PictureCallback imageCallback) {
mCamera.takePicture(null, null, imageCallback);
}
}