title: java.lang.RuntimeException: takePicture failed on mCamera.takePicture android
body: <p>I want to capture photos continuously so that every time user don't have to press the button.  </p>
  
  <p>My code</p>
  
  <pre><code>public class CameraView extends Activity implements SurfaceHolder.Callback, OnClickListener {
  private static final String TAG = "CameraTest";
  Camera mCamera;
  boolean mPreviewRunning = false;
  String currentDateTimeString;
  Timer myTimer;
  ImageView img;
  static boolean flagShowPic = true;
  public static int TIME_BET_SHOOT = 1000;
  
  public void onCreate(Bundle icicle) {
      super.onCreate(icicle);
      try {
          getWindow().setFormat(PixelFormat.TRANSLUCENT);
          requestWindowFeature(Window.FEATURE_NO_TITLE);
          getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
          setContentView(R.layout.cameraview);
  
          img = (ImageView) findViewById(R.id.blankImage);
  
          mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera);
          mSurfaceView.setOnClickListener(this);
          mSurfaceHolder = mSurfaceView.getHolder();
          mSurfaceHolder.addCallback(this);
      } catch (Exception e) {
          e.printStackTrace();
      }
  }
  
  Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
  
      public void onPictureTaken(byte[] data, Camera camera) {
          if (data != null) {
              try {
                  currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());
                  currentDateTimeString = currentDateTimeString.replace(" ", "_");
                  currentDateTimeString = currentDateTimeString.replace(":", "");
                  File f = new File(CaptureCameraImage.imageSavePath + currentDateTimeString + ".png");
                  f.createNewFile();
                  FileOutputStream fo = new FileOutputStream(f);
                  fo.write(data);
                  fo.close();
                  if (flagShowPic == true) {
                      BitmapFactory.Options opts = new BitmapFactory.Options();
                      Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, opts);
                      bitmap = Bitmap.createScaledBitmap(bitmap, 300, 300, false);
                      img.setImageBitmap(bitmap);
                  }
                  mCamera.startPreview();
              } catch (Exception e) {
                  e.printStackTrace();
              }
              setResult(585);
          }
      }
  };
  
  //  protected void onStop() {
  //      Log.e(TAG, "onStop");
  //      super.onStop();
  //      if (null != myTimer) {
  //          myTimer.cancel();
  //      }
  //      if (null != mCamera) {
  //          mCamera.stopPreview();
  //          mPreviewRunning = false;
  //          mCamera.release();
  //      }
  //  }
  
  public void surfaceCreated(SurfaceHolder holder) {
      Log.e(TAG, "surfaceCreated");
      try {
          mCamera = Camera.open(CaptureCameraImage.cameraID);
      } catch (Exception e) {
          e.printStackTrace();
      }
  }
  
  public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
      Log.e(TAG, "surfaceChanged");
      try {
          if (mPreviewRunning) {
              //mCamera.stopPreview();
          }
  
          Camera.Parameters p = mCamera.getParameters();
          p.setPreviewSize(300, 300);
  
          if (CaptureCameraImage.cameraID == 0) {
              String stringFlashMode = p.getFlashMode();
              if (stringFlashMode.equals("torch"))
                  p.setFlashMode("on"); // Light is set off, flash is set to
              // normal 'on' mode
              else
                  p.setFlashMode("torch");
          }
  
          mCamera.setPreviewDisplay(holder);
          mCamera.startPreview();
          mPreviewRunning = true;
  
          myTimer = new Timer();
          MyTimerTask myTimerTask = new MyTimerTask();
          myTimer.scheduleAtFixedRate(myTimerTask, 1000, TIME_BET_SHOOT);
      } catch (Exception e) {
          e.printStackTrace();
      }
  }
  
  public void surfaceDestroyed(SurfaceHolder holder) {
      Log.e(TAG, "surfaceDestroyed");
  //      mCamera.stopPreview();
  //      mPreviewRunning = false;
  //      mCamera.release();
  }
  
  private SurfaceView mSurfaceView;
  private SurfaceHolder mSurfaceHolder;
  
  private class MyTimerTask extends TimerTask {
      @Override
      public void run() {
          runOnUiThread(new Runnable() {
              @Override
              public void run() {
                  if (mPreviewRunning == true)
                      mCamera.takePicture(null, mPictureCallback, mPictureCallback);
              }
          });
      }
  }
  
  @Override
  public void onClick(View v) {
  }
  }
  </code></pre>
  
  <p>I'm getting exception</p>
  
  <pre><code> FATAL EXCEPTION: main java.lang.RuntimeException: takePicture failed
  at android.hardware.Camera.native_takePicture(Native Method)
  at android.hardware.Camera.takePicture(Camera.java:1194)
  at android.hardware.Camera.takePicture(Camera.java:1139)
  at com.androidmyway.demo.capturecameraimage.CameraView$MyTimerTask$1.run(CameraView.java:152)
  at android.os.Handler.handleCallback(Handler.java:730)
  at android.os.Handler.dispatchMessage(Handler.java:92)
  at android.os.Looper.loop(Looper.java:137)
  at android.app.ActivityThread.main(ActivityThread.java:5419)
  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:1187)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
  at dalvik.system.NativeStart.main(Native Method)
  </code></pre>