title: I want to record video through camera Android
body: <p>i want to record video through camera and before we start recording camera preview should be there and after we stop the recording camera preview should be there</p>
  
  <p>i wrote this code it only preview camera before we start recording.when i stop recording camera is not preview. help me</p>
  
  <pre><code>MainActivity  
  
  
  public class MainActivity extends Activity implements View.OnClickListener, SurfaceHolder.Callback {
      MediaRecorder recorder;
      SurfaceHolder holder;
      Button st;
      TextView live, stopWatch;
      boolean recording = false;
      boolean loop = false;
      EditText barcode;
      TextView head;
      ArrayList&lt;Subtitle&gt; Sub;
      long MillisecondTime, StartTime, TimeBuff, UpdateTime = 0L;
      int Seconds, Minutes, MilliSeconds;
      Handler handler;
      AVLoadingIndicatorView loading;
      LinearLayout videoSurface;
      LinearLayout cameraSurface;
  
      Timer t;
      SimpleDateFormat d2;
      SimpleDateFormat d1;
  
      boolean duration = true;
      boolean durationVal = false;
      int p = 0;
  
  
      private CameraPreview mCameraView = null;
      FrameLayout camera_view;
      SurfaceView cameraView;
  
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
  
          requestWindowFeature(Window.FEATURE_NO_TITLE);
          getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                  WindowManager.LayoutParams.FLAG_FULLSCREEN);
          setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
  
          recorder = new MediaRecorder();
          File myDirectory = new File(Environment.getExternalStorageDirectory(), "C3dssImageProcessing");
  
          if (!myDirectory.exists()) {
              myDirectory.mkdirs();
          }
  
          setContentView(R.layout.activity_main2);
  
          cameraView = (SurfaceView) findViewById(CameraView);
  
  
  
  
  
          st = (Button) findViewById(R.id.actionbtn);
          live = (TextView) findViewById(R.id.liveStatus);
          barcode = (EditText) findViewById(R.id.barcode);
          stopWatch = (TextView) findViewById(R.id.stopwatch);
  
          loading = (AVLoadingIndicatorView) findViewById(R.id.load);
          head = (TextView) findViewById(R.id.header1);
  
  
  
          initiateCamera(); 
  
  
          barcode.setEnabled(false);
  
  
          getWindow().setSoftInputMode(
                  WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN
          );
          live.setVisibility(View.INVISIBLE);
  
          holder = cameraView.getHolder();
          holder.addCallback(this);
          holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  
          st.setClickable(true);
          st.setOnClickListener(this);
  
  
  
          barcode.addTextChangedListener(new TextWatcher() {
              @Override
              public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  
                  File myDirectory = new File(Environment.getExternalStorageDirectory(), "beforeTextChanged");
  
                  if (!myDirectory.exists()) {
                      myDirectory.mkdirs();
                  }
  
              }
  
              @Override
              public void onTextChanged(CharSequence ss, int start, int before, int count) {
                  File myDirectory = new File(Environment.getExternalStorageDirectory(), "onTextChanged");
  
                  if (!myDirectory.exists()) {
                      myDirectory.mkdirs();
                  }
  
                  // Toast.makeText(getApplicationContext(), "on text changed ", Toast.LENGTH_LONG).show();
                  Subtitle subtitle = new Subtitle();
                  subtitle.setBarcode(barcode.getText().toString());
  
                  if (barcode.getText().length() &gt; 12 &amp;&amp; !(Sub == null)) {
                      barcode.setEnabled(false);
  
                      //   Toast.makeText(getApplicationContext(), "barcode fired ", Toast.LENGTH_LONG).show();
                      if (stopWatch.getText().length() &lt;= 5) {
                          subtitle.setStartTime("00:"+stopWatch.getText().toString());
                          String str = stopWatch.getText().toString();
                          String substring = str.length() &gt; 2 ? str.substring(str.length() - 2) : str;
                          int second = Integer.parseInt(substring);
                          second += 5;
                          if (second == 60) {
  
                              String s = str.length() &lt; 2 ? str : str.substring(0, 2);
                              int minitute = Integer.parseInt(s);
                              if (minitute == 59) {
                                  minitute = 00;
                                  second = 00;
                                  subtitle.setEndTime("01:" + minitute + ":" + second);
                              } else {
                                  minitute += 1;
                                  second = 00;
                                  subtitle.setEndTime("00:" + minitute + ":" + second);
                              }
                          }
  
                          if (second == 61) {
  
                              String s = str.length() &lt; 2 ? str : str.substring(0, 2);
                              int minitute = Integer.parseInt(s);
                              if (minitute == 59) {
                                  minitute = 00;
                                  second = 02;
                                  subtitle.setEndTime("01:" + minitute + ":" + second);
                              } else {
                                  minitute += 1;
                                  second = 02;
                                  subtitle.setEndTime("00:" + minitute + ":" + second);
                              }
                          }
                          if (second == 62) {
  
                              String s = str.length() &lt; 2 ? str : str.substring(0, 2);
                              int minitute = Integer.parseInt(s);
                              if (minitute == 59) {
                                  minitute = 00;
                                  second = 03;
                                  subtitle.setEndTime("01:" + minitute + ":" + second);
                              } else {
                                  minitute += 1;
                                  second = 03;
                                  subtitle.setEndTime("00:" + minitute + ":" + second);
                              }
                          }
  
                          if (second == 62) {
  
                              String s = str.length() &lt; 2 ? str : str.substring(0, 2);
                              int minitute = Integer.parseInt(s);
                              if (minitute == 59) {
                                  minitute = 00;
                                  second = 04;
                                  subtitle.setEndTime("01:" + minitute + ":" + second);
                              } else {
                                  minitute += 1;
                                  second = 04;
                                  subtitle.setEndTime("00:" + minitute + ":" + second);
                              }
                          }
                          if (second == 63) {
  
                              String s = str.length() &lt; 2 ? str : str.substring(0, 2);
                              int minitute = Integer.parseInt(s);
                              if (minitute == 59) {
                                  minitute = 00;
                                  second = 05;
                                  subtitle.setEndTime("01:" + minitute + ":" + second);
                              } else {
                                  minitute += 1;
                                  second = 05;
                                  subtitle.setEndTime("00:" + minitute + ":" + second);
                              }
                          }
                          if (second == 64) {
  
                              String s = str.length() &lt; 2 ? str : str.substring(0, 2);
                              int minitute = Integer.parseInt(s);
                              if (minitute == 59) {
                                  minitute = 00;
                                  second = 06;
                                  subtitle.setEndTime("01:" + minitute + ":" + second);
                              } else {
                                  minitute += 1;
                                  second = 06;
                                  subtitle.setEndTime("00:" + minitute + ":" + second);
                              }
                          }
                          if (second &lt; 60) {
                              String s = str.length() &lt; 2 ? str : str.substring(0, 2);
                              int minitute = Integer.parseInt(s);
                              subtitle.setEndTime("00:" + minitute + ":" + second);
                          }
                      } else {
                          subtitle.setStartTime(stopWatch.getText().toString());
                          String str = stopWatch.getText().toString();
                          String substring = str.length() &gt; 2 ? str.substring(str.length() - 2) : str;
                          int second = Integer.parseInt(substring);
                          second += 5;
  
                          if (second == 60) {
  
                              String s = str.length() &lt; 2 ? str : str.substring(0, 2);
                              String s1 = str.substring(4, 5);
                              int hour = Integer.parseInt(s);
                              int minitute = Integer.parseInt(s1);
                              if (minitute == 59) {
                                  minitute = 00;
                                  second = 00;
                                  hour += 1;
                                  subtitle.setEndTime(hour + minitute + ":" + second);
                              } else {
                                  minitute += 1;
                                  second = 00;
                                  subtitle.setEndTime(hour + minitute + ":" + second);
                              }
                          }
  
                          if (second == 61) {
  
                              String s = str.length() &lt; 2 ? str : str.substring(0, 2);
                              String s1 = str.substring(4, 5);
                              int hour = Integer.parseInt(s);
                              int minitute = Integer.parseInt(s);
                              if (minitute == 59) {
                                  minitute = 00;
                                  second = 02;
                                  hour += 1;
                                  subtitle.setEndTime(hour + minitute + ":" + second);
                              } else {
                                  minitute += 1;
                                  second = 02;
                                  subtitle.setEndTime(hour + minitute + ":" + second);
                              }
                          }
                          if (second == 62) {
  
                              String s = str.length() &lt; 2 ? str : str.substring(0, 2);
                              String s1 = str.substring(4, 5);
                              int hour = Integer.parseInt(s);
                              int minitute = Integer.parseInt(s);
                              if (minitute == 59) {
                                  minitute = 00;
                                  second = 03;
                                  hour += 1;
                                  subtitle.setEndTime(hour + minitute + ":" + second);
                              } else {
                                  minitute += 1;
                                  second = 03;
                                  subtitle.setEndTime(hour + minitute + ":" + second);
                              }
                          }
  
                          if (second == 62) {
  
                              String s = str.length() &lt; 2 ? str : str.substring(0, 2);
                              String s1 = str.substring(4, 5);
                              int hour = Integer.parseInt(s);
                              int minitute = Integer.parseInt(s);
                              if (minitute == 59) {
                                  minitute = 00;
                                  second = 04;
                                  hour += 1;
                                  subtitle.setEndTime(hour + minitute + ":" + second);
                              } else {
                                  minitute += 1;
                                  second = 04;
                                  subtitle.setEndTime(hour + minitute + ":" + second);
                              }
                          }
                          if (second == 63) {
  
                              String s = str.length() &lt; 2 ? str : str.substring(0, 2);
                              String s1 = str.substring(4, 5);
                              int hour = Integer.parseInt(s);
                              int minitute = Integer.parseInt(s);
                              if (minitute == 59) {
                                  minitute = 00;
                                  second = 05;
                                  hour += 1;
                                  subtitle.setEndTime(hour + minitute + ":" + second);
                              } else {
                                  minitute += 1;
                                  second = 05;
                                  subtitle.setEndTime(hour + minitute + ":" + second);
                              }
                          }
                          if (second == 64) {
  
                              String s = str.length() &lt; 2 ? str : str.substring(0, 2);
                              String s1 = str.substring(4, 5);
                              int hour = Integer.parseInt(s);
                              int minitute = Integer.parseInt(s);
                              if (minitute == 59) {
                                  minitute = 00;
                                  second = 06;
                                  hour += 1;
                                  subtitle.setEndTime(hour + minitute + ":" + second);
                              } else {
                                  minitute += 1;
                                  second = 06;
                                  subtitle.setEndTime(hour + minitute + ":" + second);
                              }
                          }
                          if (second &gt; 60) {
                              String s = str.length() &lt; 2 ? str : str.substring(0, 2);
                              String s1 = str.substring(4, 5);
                              int hour = Integer.parseInt(s);
                              int minitute = Integer.parseInt(s1);
                              second = 00;
                              subtitle.setEndTime(hour + minitute + ":" + second);
                          }
  
                      }
                      Sub.add(subtitle);
  
                      ValueHolder.Sub = Sub;
  
                      Timer t = new Timer(true);
                      t.schedule(new TimerTask() {
                          @Override
                          public void run() {
                              runOnUiThread(new Runnable() {
                                  @Override
                                  public void run() {
                                      barcode.setText("");
                                      barcode.setEnabled(true);
                                  }
  
  
                              });
                          }
                      }, 5000);
                      File myDirectorytest = new File(Environment.getExternalStorageDirectory(), "onTextChangedValueHolder");
  
                      if (!myDirectorytest.exists()) {
                          myDirectorytest.mkdirs();
                      }
  
                  }
              }
  
              @Override
              public void afterTextChanged(Editable s) {
  
              }
  
  
          });
      }
  
      private void initRecorder() {
          recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
          recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
  
          CamcorderProfile cpHigh = CamcorderProfile
                  .get(CamcorderProfile.QUALITY_480P);
  
          recorder.setProfile(cpHigh);
          setDayTimestamp();
          setvideoNamestamp();
          recorder.setOutputFile("/sdcard/C3dssImageProcessing/" + ValueHolder.dayFile + "/" + ValueHolder.videoName + "/" + ValueHolder.videoName + ".mp4");
          recorder.setMaxDuration(86400000); // 50 seconds
          recorder.setMaxFileSize(1000000000); // Approximately 5 megabytes
      }
  
      private void prepareRecorder() {
          recorder.setPreviewDisplay(holder.getSurface());
  
          try {
              recorder.prepare();
          } catch (IllegalStateException e) {
              e.printStackTrace();
              Log.e("illegal :",e.toString());
             // finish();
          } catch (IOException e) {
              e.printStackTrace();
              Log.e("IOEXCEPTION :",e.toString());
              //finish();
          }
      }
  
      public void onClick(final View v) {
  
  
          final Thread stopWh = new Thread() {
              final int[] hour = new int[1];
              final int[] minute = new int[1];
              final int[] second = new int[1];
  
  
              @Override
              public void run() {
                  while (!isInterrupted()) {
                      if (!durationVal) {
                          second[0] = 00;
                          minute[0] = 00;
                          hour[0] = 00;
  
                      }
                      if (duration) {
                          runOnUiThread(new Runnable() {
  
                              @Override
                              public void run() {
                                  durationVal = true;
                                  second[0] += 1;
                                  if (second[0] == 59) {
  
                                      minute[0] += 1;
                                      second[0] = 0;
                                  }
                                  if (minute[0] == 60) {
  
                                      hour[0] = 1;
                                      minute[0] = 0;
                                  }
                                  if (hour[0] &gt; 0) {
                                      DecimalFormat formatter = new DecimalFormat("00");
  
                                      stopWatch.setText(formatter.format(hour[0]) + ":" + formatter.format(minute[0]) + "" + formatter.format(second[0]));
                                  } else {
                                      DecimalFormat formatter = new DecimalFormat("00");
                                      stopWatch.setText(formatter.format(minute[0]) + ":" + formatter.format(second[0]));
                                  }
                              }
                          });
                      }
                      try {
                          Thread.sleep(1000);
                      } catch (InterruptedException e) {
                          e.printStackTrace();
                      }
                  }
              }
  
  
          };
  
  
          if (recording) {
  
              barcode.setEnabled(false);
              barcode.setFocusable(false);
  
  
              cameraView.setVisibility(View.INVISIBLE);
  
  
               initiateCamera();
  
  
  
  
  
              loading.hide();
  
           camera_view.setVisibility(View.VISIBLE);
  
  
  
              duration = false;
              durationVal = false;
              recording = false;
  
              createSRTfile(ValueHolder.Sub);
              stopWatch.setText("00:00");
              p = 1;
              live.setVisibility(View.INVISIBLE);
              live.setSelected(false);
              st.setText("START");
  
              barcode.setFocusableInTouchMode(true);
              barcode.setFocusable(true);
              getWindow().setSoftInputMode(
                      WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN
              );
  
              loop = true;
  
  
          } else {
  
  
              recording = true;
  
  
  
              barcode.setEnabled(true);
              barcode.setFocusable(true);
  
              if (p == 0) {
  
  
               camera_view.setVisibility(View.INVISIBLE);
  
                stopCamera();
  
  
  
                  initRecorder();
                  stopWh.start();
                  cameraView.setVisibility(View.VISIBLE);
              } else {
  
              camera_view.setVisibility(View.INVISIBLE);
  
  
                  stopCamera();
  
                  initRecorder();
                  duration = true;
                  cameraView.setVisibility(View.VISIBLE);
  
              }
  
  
              recorder.start();
              loading.show();
              barcode.setFocusableInTouchMode(true);
              barcode.setFocusable(true);
              getWindow().setSoftInputMode(
                      WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN
              );
              Sub = new ArrayList&lt;&gt;();
  
  
              live.setVisibility(View.VISIBLE);
              st.setText("STOP");
  
              live.setText("Live Recording...");
              live.setSelected(true);
  
  
              File myDirectoryDay1 = new File(Environment.getExternalStorageDirectory(), "C3dssImageProcessing/" + ValueHolder.dayFile);
  
              if (!myDirectoryDay1.exists()) {
                  myDirectoryDay1.mkdirs();
              }
  
  
              File myDirectoryDay = new File(Environment.getExternalStorageDirectory(), "C3dssImageProcessing/" + ValueHolder.dayFile + "/" + ValueHolder.videoName);
  
              if (!myDirectoryDay.exists()) {
                  myDirectoryDay.mkdirs();
              }
  
  
          }
  
  
      }
  
      public void surfaceCreated(SurfaceHolder holder) {
  
  
  
          prepareRecorder();
      }
  
      public void surfaceChanged(SurfaceHolder holder, int format, int width,
                                 int height) {
  
  
      }
  
      public void surfaceDestroyed(SurfaceHolder holder) {
          Toast.makeText(getApplicationContext(), "surface destroyed on main Activity", Toast.LENGTH_LONG).show();
  
  
  
  
          if (recording) {
              recorder.stop();
  
              recording = false;
          }
          recorder.reset();
  
  
  
      }
  
      private void setDayTimestamp() {
  
          ValueHolder.dayFile = new SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date());
          File myDirectory = new File(Environment.getExternalStorageDirectory(), "C3dssImageProcessing/" + ValueHolder.dayFile);
  
          if (!myDirectory.exists()) {
              myDirectory.mkdirs();
          }
  
      }
  
      private void setvideoNamestamp() {
  
          ValueHolder.videoName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new java.util.Date());
  
          File myDirectoryDay = new File(Environment.getExternalStorageDirectory(), "C3dssImageProcessing/" + ValueHolder.dayFile + "/" + ValueHolder.videoName);
  
          if (!myDirectoryDay.exists()) {
            //  Toast.makeText(getApplicationContext(), "v name : "+ValueHolder.videoName, Toast.LENGTH_LONG).show();
              myDirectoryDay.mkdirs();
          }
      }
  
  
  
  
      private void createSRTfile(ArrayList&lt;Subtitle&gt; sub) {
  
          if (!(sub == null)) {
  
              if (sub.size() &gt; 0) {
                  try {
  
                      BufferedWriter writer1 = new BufferedWriter(new FileWriter("/sdcard/C3dssImageProcessing/" + ValueHolder.dayFile + "/" + ValueHolder.videoName + "/" + ValueHolder.videoName + ".srt"));
  
                      // PrintWriter writer = new PrintWriter("/sdcard/C3dssImageProcessing/" + ValueHolder.dayFile + "/" + ValueHolder.videoName + ".srt", "UTF-8");
                      for (int i = 0; i &lt; sub.size(); i++) {
  
                          if (i == 0) {
                              writer1.write("1");
  
                              //writer.println("1");
                              writer1.newLine();
                          } else {
                              int p = i+1;
                              writer1.write(p);
                             writer1.newLine();
                          }
  
                          writer1.write(sub.get(i).getStartTime() + ",560 --&gt; " + sub.get(i).getEndTime() + ",580 ");
                          //  writer1.write(newline);
                          writer1.newLine();
                          writer1.write(sub.get(i).getBarcode()+"\n");
                          writer1.newLine();
                          writer1.newLine();
  
  
                      }
                      writer1.close();
                  } catch (IOException e) {
                      // do something
                  }
              }
          }
  
      }
  
      @Override
      public void onBackPressed() {
  
  
          super.onBackPressed();
      }
  
  
  
  
      private void initiateCamera(){
  
          camera_view = (FrameLayout)findViewById(R.id.camerPreview);
          Camera mCamera = null;
          try{
              mCamera = Camera.open();//you can use open(int) to use different cameras
          } catch (Exception e){
              Log.d("ERROR", "Failed to get camera: " + e.getMessage());
          }
  
          if(mCamera != null) {
              mCameraView = new CameraPreview(this, mCamera);//create a SurfaceView to show camera data
              ValueHolder.cam = mCamera;
  
              camera_view.addView(mCameraView);//add the SurfaceView to the layout
          }
  
  
      }
  
      private void stopCamera(){
  
  
         ValueHolder.cam.stopPreview();
  
          ValueHolder.cam.release();
  
  
  
      }
  
  }
  </code></pre>