Camera capturing

/***Main View****/

package android.learning.camera;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;

public class CameraDemo extends Activity {
	
	private Preview preview = new Preview();
	
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    
    public boolean onCreateOptionsMenu(android.view.Menu menu) {
        MenuItem item = menu.add(0, 0, 0, "Slikaj");
        item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            public boolean onMenuItemClick(MenuItem item) {
            	Intent intent = new Intent();
            	intent.setClass(getApplicationContext(), preview.getClass());
            	startActivity(intent);
            	return true;
            }
        });
        return true;
    }    
}

/****Camera callback**********/

package android.learning.camera;

import java.io.OutputStream;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;

public class ImageCaptureCallback implements PictureCallback  {

	private OutputStream filoutputStream;
	
	public ImageCaptureCallback(OutputStream filoutputStream) {
		this.filoutputStream = filoutputStream;
	}
	
	public void onPictureTaken(byte[] data, Camera camera) {
		try {
			filoutputStream.write(data);
			filoutputStream.flush();
			filoutputStream.close();
		} catch(Exception ex) {
			ex.printStackTrace();
		}
	}
}

/****Preview class for showing preview of camera**********/

package android.learning.camera;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Activity;
import android.content.ContentValues;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore.Images.Media;
import android.util.Log;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class Preview extends Activity implements SurfaceHolder.Callback {

	private Camera camera;
    private boolean isPreviewRunning = false;
    private SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyyMMddHHmmssSS");
    private SurfaceView surfaceView;
    private SurfaceHolder surfaceHolder;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFormat(PixelFormat.TRANSLUCENT);
        setContentView(R.layout.preview);
        surfaceView = (SurfaceView)findViewById(R.id.surface);
        surfaceHolder = surfaceView.getHolder();
        surfaceHolder.addCallback(this);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }
			
	Camera.PictureCallback mPictureCallbackRaw = new Camera.PictureCallback() {
        public void onPictureTaken(byte[] data, Camera c) {
            camera.startPreview();
        }
    };
    

    Camera.ShutterCallback mShutterCallback = new Camera.ShutterCallback() {
    	public void onShutter() {
    		finish();
    	}
    };
    

    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
    	ImageCaptureCallback camDemo = null;
    	if(keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
    	try {
    		String filename = timeStampFormat.format(new Date());
    		ContentValues values = new ContentValues();
    		values.put(Media.TITLE, filename);
    		values.put(Media.DESCRIPTION, "Image from Android Emulator");
    		Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
    		camDemo = new ImageCaptureCallback( getContentResolver().openOutputStream(uri));
    	} catch(Exception ex ){
    		}
    	}
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            finish();
        	return super.onKeyDown(keyCode, event);
            
        }
         
        if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
            camera.takePicture(mShutterCallback, mPictureCallbackRaw, camDemo);
            return true;
        }
        

        return false;
    }

    protected void onResume()
    {
        Log.e(getClass().getSimpleName(), "onResume");
        super.onResume();
    }

    protected void onSaveInstanceState(Bundle outState)
    {
        super.onSaveInstanceState(outState);
    }

    protected void onStop()
    {
    	super.onStop();
    }   

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
		if (isPreviewRunning) {
            camera.stopPreview();
        }
        Camera.Parameters p = camera.getParameters();
        p.setPreviewSize(width, height);
        camera.setParameters(p);
        try {
			camera.setPreviewDisplay(holder);
		} catch (IOException e) {
			e.printStackTrace();
		}
        camera.startPreview();
        isPreviewRunning = true;
		
	}

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		camera = Camera.open();
		
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		camera.stopPreview();
        isPreviewRunning = false;
        camera.release();
		
	}
	
	protected void onRestoreInstanceState(Bundle savedInstanceState)
    {
        super.onRestoreInstanceState(savedInstanceState);
    }
	
}

/****Main window layout******/

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
    
</LinearLayout>

/****Preview window layout******/

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">
    <SurfaceView android:id="@+id/surface"
        android:layout_width="fill_parent" android:layout_height="10dip"
        android:layout_weight="1">
    </SurfaceView>
</LinearLayout>

Add a Comment