title: How to capture image automatically when application start in android?
body: <p>Hi Friends I am working on a application.</p>
  
  <p>In that application <strong>when the application start then the Pic should automatically captured from the camera.</strong></p>
  
  <h2>My Code is:</h2>
  
  <p><strong>1. Camera Demo</strong></p>
  
  <pre><code>    public class CameraDemo extends Activity 
      {
          private static final String TAG = "CameraDemo";
          Camera camera;
          Preview preview;
          Button buttonClick;
          Chronometer ch;
  
          /** Called when the activity is first created. */
          @Override
  
  
      public void onCreate(Bundle savedInstanceState) 
          {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.main);
  
              preview = new Preview(this);
              ((FrameLayout) findViewById(R.id.preview)).addView(preview);
  
              buttonClick = (Button) findViewById(R.id.buttonClick);
              ch=(Chronometer)findViewById(R.id.chronometer1);
              ch.start();
  
              preview.camera.takePicture(shutterCallback,rawCallback,jpegCallback);       
  // If I write above code here it shows error.
  
              buttonClick.setOnClickListener( new OnClickListener() 
              {
                  public void onClick(View v) 
                  {
  
                      buttonClick.setVisibility(View.INVISIBLE);
                      preview.camera.takePicture(shutterCallback, rawCallback,jpegCallback);
                                 // Here it works perfactly
                      Toast.makeText(CameraDemo.this,""+ch.getText(), Toast.LENGTH_LONG).show();
                  }
              });
  
              Log.d(TAG, "onCreate'd");
          }
  
  
          ShutterCallback shutterCallback = new ShutterCallback() 
          {
              public void onShutter() 
              {
                  Log.d(TAG, "onShutter'd");
              }
          };
  
          /** Handles data for raw picture */
          PictureCallback rawCallback = new PictureCallback() 
          {
              public void onPictureTaken(byte[] data, Camera camera) 
              {
                  Log.d(TAG, "onPictureTaken - raw");
              }
          };
  
          /** Handles data for jpeg picture */
          PictureCallback jpegCallback = new PictureCallback() 
          {
              public void onPictureTaken(byte[] data, Camera camera) 
              {
                  FileOutputStream outStream = null;
                  try
                  {
                      // write to local sandbox file system
                      // outStream = CameraDemo.this.openFileOutput(String.format("%d.jpg", System.currentTimeMillis()), 0);  
                      // Or write to sdcard
                      outStream = new FileOutputStream(String.format("/sdcard/tmp/%d.jpg", System.currentTimeMillis()));  
                      outStream.write(data);
                      outStream.close();
                      Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length);
                  }
                  catch (FileNotFoundException e) 
                  {
                      e.printStackTrace();
                  }
                  catch (IOException e) 
                  {
                      e.printStackTrace();
                  }
                  finally 
                  {
                  }
                  Log.d(TAG, "onPictureTaken - jpeg");
              }
          };
  
      }
  </code></pre>
  
  <p><strong>2. Preview.java</strong></p>
  
  <pre><code>package com.example;
  
  import java.io.FileNotFoundException;
  import java.io.FileOutputStream;
  import java.io.IOException;
  
  import android.content.Context;
  import android.graphics.Canvas;
  import android.graphics.Color;
  import android.graphics.Paint;
  import android.hardware.Camera;
  import android.hardware.Camera.PreviewCallback;
  import android.util.Log;
  import android.view.SurfaceHolder;
  import android.view.SurfaceView;
  
  
  class Preview extends SurfaceView implements SurfaceHolder.Callback {
      private static final String TAG = "Preview";
  
      SurfaceHolder mHolder;
      public Camera camera;
  
      @SuppressWarnings("deprecation")
      Preview(Context context)
      {
          super(context);
  
          // Install a SurfaceHolder.Callback so we get notified when the
          // underlying surface is created and destroyed.
          mHolder = getHolder();
          mHolder.addCallback(this);
          mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
      }
  
      public void surfaceCreated(SurfaceHolder holder) 
      {
          // The Surface has been created, acquire the camera and tell it where
          // to draw.
          camera = Camera.open();
          try 
          {
              camera.setPreviewDisplay(holder);
  
              camera.setPreviewCallback(new PreviewCallback() 
              {
  
                  public void onPreviewFrame(byte[] data, Camera arg1) 
                  {
                      FileOutputStream outStream = null;
                      try 
                      {
                          outStream = new FileOutputStream(String.format("/sdcard/tmp/%d.jpg", System.currentTimeMillis()));  
                          outStream.write(data);
                          outStream.close();
                          Log.d(TAG, "onPreviewFrame - wrote bytes: " + data.length);
                      }
                      catch (FileNotFoundException e) 
                      {
                          e.printStackTrace();
                      }
                      catch (IOException e) 
                      {
                          e.printStackTrace();
                      }
                      finally 
                      {
                      }
                          Preview.this.invalidate();
                  }
              });
          }
          catch (IOException e) 
          {
              e.printStackTrace();
          }
      }
  
      public void surfaceDestroyed(SurfaceHolder holder) 
      {
          // Surface will be destroyed when we return, so stop the preview.
          // Because the CameraDevice object is not a shared resource, it's very
          // important to release it when the activity is paused.
          camera.stopPreview();
          camera = null;
      }
  
      public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) 
      {
          // Now that the size is known, set up the camera parameters and begin
          // the preview.
          Camera.Parameters parameters = camera.getParameters();
          parameters.setPreviewSize(w, h);
          camera.setParameters(parameters);
          camera.startPreview();
      }
  
      @Override
      public void draw(Canvas canvas) 
      {
              super.draw(canvas);
              Paint p= new Paint(Color.RED);
              Log.d(TAG,"draw");
              canvas.drawText("PREVIEW", canvas.getWidth()/2, canvas.getHeight()/2, p );
      }
  }
  </code></pre>
  
  <p>For that I had given above permisson:</p>
  
  <p><strong><code>&lt;uses-permission android:name="android.permission.CAMERA" /&gt;</code></strong></p>
  
  <p><strong>My Error Log is:</strong></p>
  
  <pre><code>FATAL EXCEPTION: main
  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/com.example.CameraDemo}: java.lang.NullPointerException
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2343)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)
      at android.app.ActivityThread.access$600(ActivityThread.java:162)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)
      at android.os.Handler.dispatchMessage(Handler.java:107)
      at android.os.Looper.loop(Looper.java:194)
      at android.app.ActivityThread.main(ActivityThread.java:5371)
      at java.lang.reflect.Method.invokeNative(Native Method)
      at java.lang.reflect.Method.invoke(Method.java:525)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
      at dalvik.system.NativeStart.main(Native Method)
  Caused by: java.lang.NullPointerException
      at com.example.CameraDemo.onCreate(CameraDemo.java:41)
      at android.app.Activity.performCreate(Activity.java:5122)
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)
      ... 11 more
  </code></pre>
  
  <p>My Problem is:</p>
  
  <p>When I am using this code <strong>in button click event it work perfectly.</strong> But as I need when I start the application image should capture automatically.</p>
  
  <p><strong>Same code not working in onCreate() event</strong> and application stops unfortunately.</p>
  
  <p>Please tell the solution of this.</p>
  
  <p>Thank You.</p>