Android Camera Example 1

Android Camera Example 1

AndroidCameraExample.java


import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import android.app.Activity; import android.content.Context; import android.content.pm.PackageManager; import android.hardware.Camera; import android.hardware.Camera.CameraInfo; import android.hardware.Camera.PictureCallback; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import android.widget.Button; import android.widget.LinearLayout; import android.widget.Toast; public class AndroidCameraExample extends Activity { private Camera mCamera; private CameraPreview mPreview; private PictureCallback mPicture; private Button capture, switchCamera; private Context myContext; private LinearLayout cameraPreview; private boolean cameraFront = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); myContext = this; initialize(); } private int findFrontFacingCamera() { int cameraId = -1; // Search for the front facing camera int numberOfCameras = Camera.getNumberOfCameras(); for (int i = 0; i < numberOfCameras; i++) { CameraInfo info = new CameraInfo(); Camera.getCameraInfo(i, info); if (info.facing == CameraInfo.CAMERA_FACING_FRONT) { cameraId = i; cameraFront = true; break; } } return cameraId; } private int findBackFacingCamera() { int cameraId = -1; //Search for the back facing camera //get the number of cameras int numberOfCameras = Camera.getNumberOfCameras(); //for every camera check for (int i = 0; i < numberOfCameras; i++) { CameraInfo info = new CameraInfo(); Camera.getCameraInfo(i, info); if (info.facing == CameraInfo.CAMERA_FACING_BACK) { cameraId = i; cameraFront = false; break; } } return cameraId; } public void onResume() { super.onResume(); if (!hasCamera(myContext)) { Toast toast = Toast.makeText(myContext, "Sorry, your phone does not have a camera!", Toast.LENGTH_LONG); toast.show(); finish(); } if (mCamera == null) { //if the front facing camera does not exist if (findFrontFacingCamera() < 0) { Toast.makeText(this, "No front facing camera found.", Toast.LENGTH_LONG).show(); switchCamera.setVisibility(View.GONE); } mCamera = Camera.open(findBackFacingCamera()); mPicture = getPictureCallback(); mPreview.refreshCamera(mCamera); } } public void initialize() { cameraPreview = (LinearLayout) findViewById(R.id.camera_preview); mPreview = new CameraPreview(myContext, mCamera); cameraPreview.addView(mPreview); capture = (Button) findViewById(R.id.button_capture); capture.setOnClickListener(captrureListener); switchCamera = (Button) findViewById(R.id.button_ChangeCamera); switchCamera.setOnClickListener(switchCameraListener); } OnClickListener switchCameraListener = new OnClickListener() { @Override public void onClick(View v) { //get the number of cameras int camerasNumber = Camera.getNumberOfCameras(); if (camerasNumber > 1) { //release the old camera instance //switch camera, from the front and the back and vice versa releaseCamera(); chooseCamera(); } else { Toast toast = Toast.makeText(myContext, "Sorry, your phone has only one camera!", Toast.LENGTH_LONG); toast.show(); } } }; public void chooseCamera() { //if the camera preview is the front if (cameraFront) { int cameraId = findBackFacingCamera(); if (cameraId >= 0) { //open the backFacingCamera //set a picture callback //refresh the preview mCamera = Camera.open(cameraId); mPicture = getPictureCallback(); mPreview.refreshCamera(mCamera); } } else { int cameraId = findFrontFacingCamera(); if (cameraId >= 0) { //open the backFacingCamera //set a picture callback //refresh the preview mCamera = Camera.open(cameraId); mPicture = getPictureCallback(); mPreview.refreshCamera(mCamera); } } } @Override protected void onPause() { super.onPause(); //when on Pause, release camera in order to be used from other applications releaseCamera(); } private boolean hasCamera(Context context) { //check if the device has camera if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) { return true; } else { return false; } } private PictureCallback getPictureCallback() { PictureCallback picture = new PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { //make a new picture file File pictureFile = getOutputMediaFile(); if (pictureFile == null) { return; } try { //write the file FileOutputStream fos = new FileOutputStream(pictureFile); fos.write(data); fos.close(); Toast toast = Toast.makeText(myContext, "Picture saved: " + pictureFile.getName(), Toast.LENGTH_LONG); toast.show(); } catch (FileNotFoundException e) { } catch (IOException e) { } //refresh camera to continue preview mPreview.refreshCamera(mCamera); } }; return picture; } OnClickListener captrureListener = new OnClickListener() { @Override public void onClick(View v) { mCamera.takePicture(null, null, mPicture); } }; //make picture and save to a folder private static File getOutputMediaFile() { //make a new file directory inside the "sdcard" folder File mediaStorageDir = new File("/sdcard/", "JCG Camera"); //if this "JCGCamera folder does not exist if (!mediaStorageDir.exists()) { //if you cannot make this folder return if (!mediaStorageDir.mkdirs()) { return null; } } //take the current timeStamp String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); File mediaFile; //and make a media file: mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg"); return mediaFile; } private void releaseCamera() { // stop and release camera if (mCamera != null) { mCamera.release(); mCamera = null; } } }
CameraPreview.java
import java.io.IOException;

import android.content.Context;
import android.hardware.Camera;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
   private SurfaceHolder mHolder;
   private Camera mCamera;

   public CameraPreview(Context context, Camera camera) {
      super(context);
      mCamera = camera;
      mHolder = getHolder();
      mHolder.addCallback(this);
      // deprecated setting, but required on Android versions prior to 3.0      mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
   }

   public void surfaceCreated(SurfaceHolder holder) {
      try {
         // create the surface and start camera preview         if (mCamera == null) {
            mCamera.setPreviewDisplay(holder);
            mCamera.startPreview();
         }
      } catch (IOException e) {
         Log.d(VIEW_LOG_TAG, "Error setting camera preview: " + e.getMessage());
      }
   }

   public void refreshCamera(Camera camera) {
      if (mHolder.getSurface() == null) {
         // preview surface does not exist         return;
      }
      // stop preview before making changes      try {
         mCamera.stopPreview();
      } catch (Exception e) {
         // ignore: tried to stop a non-existent preview      }
      // set preview size and make any resize, rotate or      // reformatting changes here      // start preview with new settings      setCamera(camera);
      try {
         mCamera.setPreviewDisplay(mHolder);
         mCamera.startPreview();
      } catch (Exception e) {
         Log.d(VIEW_LOG_TAG, "Error starting camera preview: " + e.getMessage());
      }
   }

   public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
      // If your preview can change or rotate, take care of those events here.      // Make sure to stop the preview before resizing or reformatting it.      refreshCamera(mCamera);
   }

   public void setCamera(Camera camera) {
      //method to set a camera instance      mCamera = camera;
   }

   @Override
   public void surfaceDestroyed(SurfaceHolder holder) {
      // TODO Auto-generated method stub      // mCamera.release();
   }
}



Manifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.hp.studentcam" >
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-feature android:name="android.hardware.camera.front" android:required="false" />
    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:screenOrientation="landscape"        android:theme="@style/AppTheme" >
        <activity            android:name=".AndroidCameraExample"            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

I Am Not The Owner Of These Code .I Merely Have Copied Them From Various Sources. The Only Thing I Did Is That I Am Going To Present Them In More Easy Way To Understand.

Comments

Popular posts from this blog

LED Blinking using 8051 Microcontroller and Keil C – AT89C51

Android Camera Example 2

Java Script to make text change text color