可以实现调用摄像头拍照,后台自动保存照片。
例子非常详细,经过测试后的。
关于评论中很多童鞋说不能连拍,在这里澄清一下:连拍功能在这里确实没有体现,我只是贴出了部分代码,实现了不阻塞主线程,且拍照完成后继续停留在拍摄界面,如果大家想要实现连拍,可以在onClick()方法中循环调用takePicture()方法,想要连拍几张自己定义,代码是用来学习的,希望大家可以体谅。
public class SnapPicActivity extends Activity
implements SurfaceHolder.Callback{
final private static String STILL_IMAGE_FILE = "capture.jpg";
final private static int IMAGE_NUM= 3;
private String strCaptureFilePath = "/sdcard/camera_snap.jpg";
private String TAG = "IsiCamera2Activity";
private Button btn_capture;
private Button btn_sum;
private Camera camera = null;
private SurfaceHolder mSurfaceHolder;
private SurfaceView mSurfaceView01;
private FrameLayout mFrameLayout01;
private boolean bPreviewing =false;
private int intScreenWidth;
private int intScreenHeight;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* 使应用程序全屏幕运行,不使用title bar */
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
/* 取得屏幕解析像素 */
getDisplayMetrics();
findViews();
getSurfaceHolder();
btn_capture.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
jumpOutAToast("test onclick");
//这里实现模拟连拍逻辑
for(int i=0; i<IMAGE_NUM; i++){
takeAPicture();
}
}
});
}
@Override
protected void onPause() {
//被交换到后台时执行
//camera.release();
//camera = null;
bPreviewing = false;
jumpOutAToast("test onPause");
super.onPause();
}
@Override
public void onStop() {
jumpOutAToast("test onStop");
resetCamera();
super.onStop();
}
@Override