From 36becd93babaf5968988e3beb655dcbc745aa981 Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Wed, 11 Sep 2013 17:19:56 +0100 Subject: fixing layout --- ref/CameraActivity.java | 282 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 282 insertions(+) create mode 100644 ref/CameraActivity.java (limited to 'ref/CameraActivity.java') diff --git a/ref/CameraActivity.java b/ref/CameraActivity.java new file mode 100644 index 0000000..3f15b08 --- /dev/null +++ b/ref/CameraActivity.java @@ -0,0 +1,282 @@ +package com.example.rotorm; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.sql.Date; +import java.text.SimpleDateFormat; + +import android.app.Activity; +import android.content.Context; +import android.hardware.Camera; +import android.hardware.Camera.AutoFocusCallback; +import android.hardware.Camera.PictureCallback; +import android.hardware.Camera.ShutterCallback; +import android.media.CamcorderProfile; +import android.media.MediaRecorder; +import android.net.Uri; +import android.os.Bundle; +import android.os.Environment; +import android.util.Log; +import android.view.SurfaceView; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnLongClickListener; +import android.view.ViewGroup.LayoutParams; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.FrameLayout; + + +//why is it so hard to put an eclipse project into git +//http://developer.android.com/guide/topics/media/camera.html + +public class CameraActivity extends Activity { + public static final String TAG = "rotorM"; + public static final int MEDIA_TYPE_IMAGE = 1; + public static final int MEDIA_TYPE_VIDEO = 2; + Preview preview; + Button buttonClick; + Camera camera; + String fileName; + Activity act; + Context ctx; + boolean isRecording; + MediaRecorder mMediaRecorder; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ctx = this; + act = this; + requestWindowFeature(Window.FEATURE_NO_TITLE); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + + setContentView(R.layout.main); + + preview = new Preview(this, (SurfaceView)findViewById(R.id.surfaceView)); + preview.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); + ((FrameLayout) findViewById(R.id.preview)).addView(preview); + preview.setKeepScreenOn(true); + + buttonClick = (Button) findViewById(R.id.buttonClick); + + buttonClick.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + // preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback); + //camera.takePicture(shutterCallback, rawCallback, jpegCallback); + if (isRecording) { + // stop recording and release camera + mMediaRecorder.stop(); // stop the recording + releaseMediaRecorder(); // release the MediaRecorder object + camera.lock(); // take camera access back from MediaRecorder + + // inform the user that recording has stopped + //setCaptureButtonText("Capture"); + isRecording = false; + } else { + // initialize video camera + if (prepareVideoRecorder()) { + // Camera is available and unlocked, MediaRecorder is prepared, + // now you can start recording + mMediaRecorder.start(); + + // inform the user that recording has started + //setCaptureButtonText("Stop"); + isRecording = true; + } else { + // prepare didn't work, release the camera + releaseMediaRecorder(); + // inform user + } + } + } + }); + + buttonClick.setOnLongClickListener(new OnLongClickListener(){ + @Override + public boolean onLongClick(View arg0) { + camera.autoFocus(new AutoFocusCallback(){ + @Override + public void onAutoFocus(boolean arg0, Camera arg1) { + //camera.takePicture(shutterCallback, rawCallback, jpegCallback); + } + }); + return true; + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + // preview.camera = Camera.open(); + camera = Camera.open(); + camera.startPreview(); + preview.setCamera(camera); + } +/* + @Override + protected void onPause() { + if(camera != null) { + camera.stopPreview(); + preview.setCamera(null); + camera.release(); + camera = null; + } + super.onPause(); + } + */ + + @Override + protected void onPause() { + super.onPause(); + releaseMediaRecorder(); // if you are using MediaRecorder, release it first + releaseCamera(); // release the camera immediately on pause event + } + + private void releaseMediaRecorder(){ + if (mMediaRecorder != null) { + mMediaRecorder.reset(); // clear recorder configuration + mMediaRecorder.release(); // release the recorder object + mMediaRecorder = null; + camera.lock(); // lock camera for later use + } + } + + private void releaseCamera(){ + if (camera != null){ + camera.release(); // release the camera for other applications + camera = null; + } + } + + private void resetCam() { + camera.startPreview(); + preview.setCamera(camera); + } +/* + ShutterCallback shutterCallback = new ShutterCallback() { + public void onShutter() { + // Log.d(TAG, "onShutter'd"); + } + }; + + PictureCallback rawCallback = new PictureCallback() { + public void onPictureTaken(byte[] data, Camera camera) { + // Log.d(TAG, "onPictureTaken - raw"); + } + }; + + PictureCallback jpegCallback = new PictureCallback() { + public void onPictureTaken(byte[] data, Camera camera) { + FileOutputStream outStream = null; + try { + // Write to SD Card + fileName = String.format("/sdcard/camtest/%d.jpg", System.currentTimeMillis()); + outStream = new FileOutputStream(fileName); + outStream.write(data); + outStream.close(); + Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length); + + resetCam(); + + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + } + Log.d(TAG, "onPictureTaken - jpeg"); + } + }; + */ + private boolean prepareVideoRecorder(){ + + camera = getCameraInstance(); + mMediaRecorder = new MediaRecorder(); + + // Step 1: Unlock and set camera to MediaRecorder + camera.unlock(); + mMediaRecorder.setCamera(camera); + + // Step 2: Set sources + mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); + mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); + + // Step 3: Set a CamcorderProfile (requires API Level 8 or higher) + mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); + + // Step 4: Set output file + mMediaRecorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString()); + + // Step 5: Set the preview output + mMediaRecorder.setPreviewDisplay(preview.mHolder.getSurface()); + + // Step 6: Prepare configured MediaRecorder + try { + mMediaRecorder.prepare(); + } catch (IllegalStateException e) { + Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage()); + releaseMediaRecorder(); + return false; + } catch (IOException e) { + Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage()); + releaseMediaRecorder(); + return false; + } + return true; + } + /** Create a file Uri for saving an image or video */ + private static Uri getOutputMediaFileUri(int type){ + return Uri.fromFile(getOutputMediaFile(type)); + } + + /** Create a File for saving an image or video */ + private static File getOutputMediaFile(int type){ + // To be safe, you should check that the SDCard is mounted + // using Environment.getExternalStorageState() before doing this. + + File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory( + Environment.DIRECTORY_PICTURES), "MyCameraApp"); + // This location works best if you want the created images to be shared + // between applications and persist after your app has been uninstalled. + + // Create the storage directory if it does not exist + if (! mediaStorageDir.exists()){ + if (! mediaStorageDir.mkdirs()){ + Log.d("MyCameraApp", "failed to create directory"); + return null; + } + } + + // Create a media file name + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date(type)); + File mediaFile; + if (type == MEDIA_TYPE_IMAGE){ + mediaFile = new File(mediaStorageDir.getPath() + File.separator + + "IMG_"+ timeStamp + ".jpg"); + } else if(type == MEDIA_TYPE_VIDEO) { + mediaFile = new File(mediaStorageDir.getPath() + File.separator + + "VID_"+ timeStamp + ".mp4"); + } else { + return null; + } + + return mediaFile; + } + + private Camera getCameraInstance(){ + Camera c = null; + try { + c = Camera.open(); // attempt to get a Camera instance + //c = this.open(); // attempt to get a Camera instance + } + catch (Exception e){ + // Camera is not available (in use or does not exist) + } + return c; // returns null if camera is unavailable + } +} -- cgit v1.2.3