public class CameraView extends SurfaceView implements Callback, PictureCallback {
private Uri mImageCaptureUri;
private SurfaceHolder holder;
private Camera camera;
private File path;
Context context;
public CameraView(Context context) {
super(context);
this.context=context;
holder=getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// TODO Auto-generated constructor stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
try{
camera=Camera.open();
camera.setPreviewDisplay(holder);
}catch(Exception e){
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// TODO Auto-generated method stub
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(90,90);
camera.setParameters(parameters);
camera.startPreview();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
camera.setPreviewCallback(null);
camera.stopPreview();
camera.release();
camera=null;
}
public boolean onTouchEvent(MotionEvent event){
if(event.getAction()==MotionEvent.ACTION_DOWN){
camera.takePicture(null, null,this);
}
return true;
}
public void onPictureTaken(byte[] data, Camera camera) {
// TODO Auto-generated method stub
try{
data2sd(getContext(),data,"test.jpg");
}catch(Exception e)
{
android.util.Log.e("","" +e.toString());
}
camera.startPreview();
}
private void data2sd(Context context, byte[]w,String filename)throws Exception{
path = new File("/mnt/sdcard/" + File.separator + "wrong");
if (!path.exists()) path.mkdir();
String url = "tmp_" + String.valueOf(System.currentTimeMillis()) + ".jpg";
//mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), url));
//intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
FileOutputStream fos=null;
try{
fos=new FileOutputStream("/mnt/sdcard/wrong/"+url);
fos.write(w);
//context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("/mnt/sdcard/wrong/"+url)));
galleryAddPic(path);
fos.close();
}catch(Exception e){
if(fos!=null)
fos.close();
throw e;
}
}
private void galleryAddPic(File f) {
// TODO Auto-generated method stub
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
context.sendBroadcast(mediaScanIntent);
}