Thursday, 17 April 2014

Take automatical photo from front camera in android.


public class MainActivity extends Activity {  
        private Camera mCamera;  
        private CameraPreview mPreview;  
        public static final int MEDIA_TYPE_IMAGE = 1;  
        TextView lblname;  
        @Override  
        public void onCreate(Bundle savedInstanceState) {  
          super.onCreate(savedInstanceState);  
          setContentView(R.layout.main);  
          // Create an instance of Camera  
          mCamera = getCameraInstance();  
          // Create our Preview view and set it as the content of our activity.  
          mPreview = new CameraPreview(this, mCamera);  
          FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);  
          preview.addView(mPreview);  
          FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);  
             params.gravity = Gravity.CENTER| Gravity.BOTTOM;  
                lblname = new TextView(this);  
                lblname.setText("3 sec");  
                lblname.setId(5); // id should be unique  
                lblname.setTextSize(55);  
                lblname.setTextColor(Color.WHITE);  
                lblname.setGravity(Gravity.CENTER);  
                preview.addView(lblname,params);// specify your index  
          new CountDownTimer(4000, 1000) {  
            public void onTick(long millisUntilFinished) {  
                 lblname.setText("" + millisUntilFinished / 1000);  
            }  
            public void onFinish() {  
                  lblname.setText("");  
                  mCamera.takePicture(null, null, mPicture);  
            }  
           }.start();  
        }  
      /** A safe way to get an instance of the Camera object. */  
      public static Camera getCameraInstance(){  
        Camera c = null;  
        int cameraCount = 0;  
        try {  
          // c = Camera.open(); // attempt to get a Camera instance  
          Camera.CameraInfo cameraInfo = new Camera.CameraInfo();  
          cameraCount = Camera.getNumberOfCameras();  
          System.out.println("cameraCount:"+cameraCount);  
          for (int camIdx = 0; camIdx < cameraCount; camIdx++) {  
            Camera.getCameraInfo(camIdx, cameraInfo);  
            if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {  
              try {  
                c = Camera.open(camIdx);  
              } catch (RuntimeException e) {  
                Log.e("camera", "Camera failed to open: " + e.getLocalizedMessage());  
              }  
            }  
          }  
        }  
        catch (Exception e){  
          // Camera is not available (in use or does not exist)  
             System.out.println("camera error:"+e);  
        }  
        return c; // returns null if camera is unavailable  
      }  
      private PictureCallback mPicture = new PictureCallback() {  
        @Override  
        public void onPictureTaken(byte[] data, Camera camera) {  
          File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);  
          String TAG = "preview";  
                if (pictureFile == null){  
            Log.d(TAG, "Error creating media file, check storage permissions: ");  
            return;  
          }  
          try {  
            FileOutputStream fos = new FileOutputStream(pictureFile);  
            fos.write(data);  
            fos.close();  
          } catch (FileNotFoundException e) {  
            Log.d(TAG, "File not found: " + e.getMessage());  
          } catch (IOException e) {  
            Log.d(TAG, "Error accessing file: " + e.getMessage());  
          }  
        }  
      };  
           /** 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.getExternalStorageDirectory(), "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());  
             File mediaFile;  
             if (type == MEDIA_TYPE_IMAGE){  
               mediaFile = new File(mediaStorageDir.getPath() + File.separator +  
               "IMG_"+ timeStamp + ".jpg");  
             } else {  
               return null;  
             }  
             return mediaFile;  
           }  
 }  
Camera preview
 /** A basic Camera preview class */  
 public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {  
   private SurfaceHolder mHolder;  
   private Camera mCamera;  
      private String TAG="camera preview";  
   public CameraPreview(Context context, Camera camera) {  
     super(context);  
     mCamera = camera;  
     // Install a SurfaceHolder.Callback so we get notified when the  
     // underlying surface is created and destroyed.  
     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) {  
     // The Surface has been created, now tell the camera where to draw the preview.  
     try {  
       mCamera.setPreviewDisplay(holder);  
       mCamera.startPreview();  
     } catch (IOException e) {  
       Log.d(TAG, "Error setting camera preview: " + e.getMessage());  
     }  
   }  
   public void surfaceDestroyed(SurfaceHolder holder) {  
     // empty. Take care of releasing the Camera preview in your activity.  
   }  
   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.  
     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  
     try {  
       mCamera.setPreviewDisplay(mHolder);  
       mCamera.startPreview();  
     } catch (Exception e){  
       Log.d(TAG, "Error starting camera preview: " + e.getMessage());  
     }  
   }  
 }  

main.xml
 <linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="horizontal" xmlns:android="http://schemas.android.com/apk/res/android">  
   <framelayout android:id="@+id/camera_preview" android:layout_height="fill_parent" android:layout_weight="1" android:layout_width="fill_parent">  
   </framelayout>  
 </linearlayout></div>  
Androidmanifest.xml
   <uses-permission android:name="android.permission.CAMERA" />  
 <uses-feature android:name="android.hardware.camera" android:required="false" />  
 <uses-feature android:name="android.hardware.camera.front" android:required="false" />  
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  

No comments:

Post a Comment