package com.cs169.android.assassins; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /*import com.google.android.maps.GeoPoint;*/ import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.hardware.Camera; import android.hardware.Camera.PreviewCallback; import android.os.CountDownTimer; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; class Preview extends SurfaceView implements SurfaceHolder.Callback { private static final String TAG = "Preview"; SurfaceHolder mHolder; public Camera camera; Preview(Context context,Camera camera) { super(context); this.camera=camera; // Install a SurfaceHolder.Callback so we get notified when the // underlying surface is created and destroyed. mHolder = getHolder(); mHolder.addCallback(this); mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } public void surfaceCreated(SurfaceHolder holder) { // The Surface has been created, acquire the camera and tell it where // to draw. //camera = Camera.open(); try { camera.setPreviewDisplay(holder); camera.setPreviewCallback(new PreviewCallback() { public void onPreviewFrame(byte[] data, Camera arg1) { FileOutputStream outStream = null; try { outStream = new FileOutputStream(String.format( "/sdcard/%d.jpg", System.currentTimeMillis())); outStream.write(data); outStream.close(); Log.d(TAG, "onPreviewFrame - wrote bytes: " + data.length); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { } Preview.this.invalidate(); } }); } catch (IOException e) { e.printStackTrace(); } } public void surfaceDestroyed(SurfaceHolder holder) { // Surface will be destroyed when we return, so stop the preview. // Because the CameraDevice object is not a shared resource, it's very // important to release it when the activity is paused. /* camera.stopPreview(); //camera.release(); //camera = null; */ Log.d("CAMERA6", camera.toString()); CountDownTimer countDownTimer = new CountDownTimer(1000, 1000) { @Override public void onFinish() { if(camera != null){ Log.d("CAMERA1", camera.toString()); camera.setPreviewCallback(null); Log.d("CAMERA2", camera.toString()); camera.stopPreview(); Log.d("CAMERA1", camera.toString()); camera.release(); camera = null; camera.release(); camera = null; } } @Override public void onTick(long millisUntilFinished) { } }; Log.d("CAMERA7", camera.toString()); } public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { // Now that the size is known, set up the camera parameters and begin // the preview. Camera.Parameters parameters = camera.getParameters(); parameters.setPreviewSize(w, h); camera.setParameters(parameters); camera.startPreview(); } /*@Override public void surfaceDestroyed(SurfaceHolder holder) { if(camera != null){ camera.stopPreview(); camera.setPreviewCallback(null); camera.release(); camera = null; } } @Override public void surfaceCreated(SurfaceHolder holder) { if (camera == null) { camera = Camera.open(); try { camera.setPreviewDisplay(holder); // TODO test how much setPreviewCallbackWithBuffer is faster camera.setPreviewCallback(this); } catch (IOException e) { camera.release(); camera = null; } } }*/ @Override public void draw(Canvas canvas) { super.draw(canvas); Paint p = new Paint(Color.RED); Log.d(TAG, "draw"); canvas.drawText("PREVIEW", canvas.getWidth() / 2, canvas.getHeight() / 2, p); } }