packagecom.dhsr.pujiejia.ui;importjava.io.File;importjava.io.FileOutputStream;importjava.text.SimpleDateFormat;importjava.util.Date;importandroid.annotation.SuppressLint;importandroid.app.Activity;importandroid.content.Context;importandroid.content.Intent;importandroid.content.res.Configuration;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;importandroid.graphics.PixelFormat;importandroid.hardware.Camera;importandroid.hardware.Camera.CameraInfo;importandroid.os.Bundle;importandroid.os.Environment;importandroid.os.Handler;importandroid.view.SurfaceHolder;importandroid.view.SurfaceView;importandroid.view.Window;importandroid.view.WindowManager;importandroid.widget.TextView;importcom.example.pujiejiaapp.R;
@SuppressLint({"NewApi", "SdCardPath"})public class CameraActivity extends Activity implementsRunnable {//预览图片范围
privateSurfaceView surfaceView;privateTextView tv_time;//倒计时拍摄
private int cameratime = 4;privateCamera camera;private boolean preview = false;//文件名字
privateString filename;//文件名字的带的时间戳
privateString timeString;//格式化时间
privateSimpleDateFormat dateFormat;//日期对象
privateDate date;//控制线程
boolean stopThread = false;privateFile file;
String photo;private Handler mHandler = newHandler() {public voidhandleMessage(android.os.Message msg) {int what =msg.what;switch(what) {case 222:
tv_time.setText("" +cameratime);if ("0".equals(tv_time.getText().toString())) {
tv_time.setText("拍摄成功!");
takePhoto();
}break;
}
};
};
@Overrideprotected voidonCreate(Bundle savedInstanceState) {//TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
CameraActivity.this.setFinishOnTouchOutside(false);//初始化数据
findView();
surfaceView.getHolder().addCallback(newSufaceListener());/*下面设置Surface不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前*/surfaceView.getHolder()
.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceView.getHolder().setFixedSize(200, 200); //设置分辨率
}
@Overrideprotected voidonStart() {//TODO Auto-generated method stub
super.onStart();//开启线程
new Thread(this).start();
}private final class SufaceListener implementsSurfaceHolder.Callback {/*** surface改变*/@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, intwidth,intheight) {
}/*** surface创建*/@Overridepublic voidsurfaceCreated(SurfaceHolder holder) {try{for (int i = 0; i < Camera.getNumberOfCameras(); i++) {
CameraInfo info= newCameraInfo();
Camera.getCameraInfo(i, info);//调用系统的前置摄像头
if (info.facing ==CameraInfo.CAMERA_FACING_FRONT) {
camera=Camera.open(i);
}
}
Camera.Parameters parameters=camera.getParameters();/*每秒从摄像头捕获5帧画面,*/parameters.setPreviewFrameRate(5);/*设置照片的输出格式:jpg*/parameters.setPictureFormat(PixelFormat.JPEG);/*照片质量*/parameters.set("jpeg-quality", 85);
WindowManager wm=(WindowManager) getSystemService(Context.WINDOW_SERVICE);
camera.setParameters(parameters);
camera.setPreviewDisplay(surfaceView.getHolder());//通过SurfaceView显示取景画面
camera.startPreview();
preview= true;
}catch(Exception e) {
}
}/*** surface销毁*/@Overridepublic voidsurfaceDestroyed(SurfaceHolder holder) {if (camera != null) {if(preview)
camera.stopPreview();
camera.release();
camera= null;
}
}
}/*** 拍摄照片*/
private voidtakePhoto() {//执行拍照效果
camera.takePicture(null, null, newCamera.PictureCallback() {
@Overridepublic void onPictureTaken(byte[] data, Camera camera) {try{
Bitmap bitmap= BitmapFactory.decodeByteArray(data, 0,
data.length);
timeString=formatDate();//保存到data/data目录自定义文件夹下
filename = "/data/data/com.example.pujiejiaapp/images/"
+ timeString + ".jpg";
File file= newFile(filename);boolean createNewFile =file.createNewFile()
System.out.println("创建文件夹成功没有" +createNewFile);
System.out.println(file);
FileOutputStream outStream= newFileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG,60, outStream);
outStream.flush();
outStream.close();//重新浏览
camera.stopPreview();
camera.startPreview();
preview= true;
}catch(Exception e) {
e.printStackTrace();
}finally{
}
}
});
}
@Overridepublic voidrun() {while (!stopThread) {try{//按秒数倒计时
Thread.sleep(1000);
}catch(InterruptedException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
cameratime--;
mHandler.sendEmptyMessage(222);if (cameratime <= 0) {break;
}
}
}//初始化数据
private voidfindView() {
surfaceView= (SurfaceView) this.findViewById(R.id.surfaceView);
tv_time=(TextView) findViewById(R.id.tv_time);
}//格式化系统的时间
publicString formatDate() {
date= newDate(System.currentTimeMillis());//日期格式
dateFormat = new SimpleDateFormat("'IMG'_yyyyMMddHHmmss");returndateFormat.format(date);
}
@Overrideprotected voidonDestroy() {//TODO Auto-generated method stub//线程已关闭
super.onDestroy();
stopThread= true;
}
}