ImageCapture.java :  » Geo » photogeolocator » edu » uoc » mperezma » camera » Android Open Source

Android Open Source » Geo » photogeolocator 
photogeolocator » edu » uoc » mperezma » camera » ImageCapture.java
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package edu.uoc.mperezma.camera;

import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.location.LocationManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
import edu.uoc.mperezma.location.LocationHelper;
import edu.uoc.mperezma.location.LocationHelperListener;
import edu.uoc.mperezma.main.R;

/**
 *
 * @author mperezma
 */
public class ImageCapture extends Activity implements SurfaceHolder.Callback, Camera.AutoFocusCallback, LocationHelperListener {

    private Camera camera;
    private SurfaceView surfaceView;
    private SurfaceHolder surfaceHolder;
    private boolean useGps = true;
    private double longitude;
    private double latitude;
    private LocationHelper locationHelper;
    private MediaPlayer autofocusPlayer;
    private MediaPlayer shotPlayer;
    protected boolean takingPicture = false;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

        if (getIntent().getExtras().containsKey("useGps")) {
            useGps = getIntent().getExtras().getBoolean("useGps");
            Object o = getIntent().getExtras().get("useGps");
        }
        if (useGps) {
            locationHelper = new LocationHelper(this, (LocationManager) getSystemService(Context.LOCATION_SERVICE));
            onlocationChanged();
        } else {
            longitude = getIntent().getExtras().getDouble("longitude");
            latitude = getIntent().getExtras().getDouble("latitude");
        }
        getWindow().setFormat(PixelFormat.TRANSLUCENT);
        setContentView(R.layout.image_capture);
        surfaceView = (SurfaceView) findViewById(R.id.surface);
        surfaceHolder = surfaceView.getHolder();
        surfaceHolder.addCallback(this);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    public double getLatitude() {
        return latitude;
    }

    public double getLongitude() {
        return longitude;
    }

    public void onlocationChanged() {
        if (useGps && locationHelper.hasData()) {
            longitude = locationHelper.getLongitude();
            latitude = locationHelper.getLatitude();
        }
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
    }

    Camera.PictureCallback mPictureCallbackRaw = new Camera.PictureCallback() {
        public void onPictureTaken(byte[] data, Camera c) {
            Toast.makeText(ImageCapture.this, R.string.pictureTaken, Toast.LENGTH_SHORT).show();
            shotBeep();
        }
    };

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

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_MENU) && !takingPicture) {
            takingPicture = true;
            Toast.makeText(ImageCapture.this, R.string.takingPicture, Toast.LENGTH_SHORT).show();
            autofocusBeep();
            try {
                final Parameters parameters = camera.getParameters();
                SharedPreferences settings = getSharedPreferences("camera", 0);
                int flash = settings.getInt("flash", 0);
                switch (flash) {
                    case 0:
                        parameters.set("flash-mode", "off");
                        break;
                    case 1:
                        parameters.set("flash-mode", "on");
                        break;
                    case 2:
                        parameters.set("flash-mode", "auto");
                }
                camera.setParameters(parameters);
            } catch (Exception e) {
            }
            camera.autoFocus(this);
            return true;
        }
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            return super.onKeyDown(keyCode, event);
        }
        if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT ||
                keyCode == KeyEvent.KEYCODE_DPAD_UP) {
            try {
                final Parameters parameters = camera.getParameters();
                int zoom = parameters.getInt("taking-picture-zoom");
                zoom += 5;
                zoom = zoom > 40 ? 40 : zoom;
                parameters.set("taking-picture-zoom", zoom);
                camera.setParameters(parameters);
            } catch (Exception e) {
            }
        }
        if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT ||
                keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
            try {
                final Parameters parameters = camera.getParameters();
                int zoom = parameters.getInt("taking-picture-zoom");
                zoom -= 5;
                zoom = zoom < 0 ? 0 : zoom;
                parameters.set("taking-picture-zoom", zoom);
                camera.setParameters(parameters);
            } catch (Exception e) {
            }
        }

        return false;
    }

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

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

    @Override
    protected void onStop() {
        Log.e(getClass().getSimpleName(), "onStop");
        super.onStop();
    }

    public void surfaceCreated(SurfaceHolder holder) {
        try {
            camera = Camera.open();
            camera.setPreviewDisplay(holder);
            camera.startPreview();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        if (camera != null) {
            camera.stopPreview();
            camera.release();
            camera = null;
        }
    }

    public void onAutoFocus(boolean arg0, Camera arg1) {
        try {
            SharedPreferences settings = getSharedPreferences("rational", 0);
            boolean rational = settings.getBoolean("enabled", true);

            camera.takePicture(mShutterCallback, mPictureCallbackRaw, new ImageCaptureCallback(this, rational));
        } catch (Exception ex) {
            ex.printStackTrace();
            Log.e(getClass().getSimpleName(), ex.getMessage(), ex);
        }
    }

    void startPreview() {
        camera.startPreview();
    }


    private void autofocusBeep() {
        try {
            autofocusPlayer = MediaPlayer.create(this, R.raw.beep26);
            autofocusPlayer.setLooping(false);
            autofocusPlayer.start();
            autofocusPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

                public void onCompletion(MediaPlayer arg0) {
                    releaseAutofocusPlayer();
                }

            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void releaseAutofocusPlayer() {
        if (autofocusPlayer != null) {
            autofocusPlayer.release();
            autofocusPlayer = null;
        }
    }

    private void releaseShotPlayer() {
        if (shotPlayer != null) {
            shotPlayer.release();
            shotPlayer = null;
        }
    }

    private void shotBeep() {
        try {
            shotPlayer = MediaPlayer.create(this, R.raw.beep29);
            shotPlayer.setLooping(false);
            shotPlayer.start();
            shotPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

                public void onCompletion(MediaPlayer arg0) {
                    releaseShotPlayer();
                }

            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (locationHelper != null) {
            locationHelper.disable();
        }
        releaseAutofocusPlayer();
        releaseShotPlayer();
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.