Media Android

package app.test;
import java.io.File;
import java.io.IOException;
import android.app.Activity;
import android.hardware.Camera;
import android.media.MediaRecorder;
import android.media.MediaRecorder.OnErrorListener;
import android.media.MediaRecorder.OnInfoListener;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.View;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.VideoView;
public class Test extends Activity implements
        SurfaceHolder.Callback, OnInfoListener, OnErrorListener {
  private static final String TAG = "RecordVideo";
  private MediaRecorder mRecorder = null;
  private String mOutputFileName;
  private VideoView mVideoView = null;
  private SurfaceHolder mHolder = null;
  private Button mInitBtn = null;
  private Button mStartBtn = null;
  private Button mStopBtn = null;
  private Button mPlayBtn = null;
  private Button mStopPlayBtn = null;
  private Camera mCamera = null;
  private TextView mRecordingMsg = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.v(TAG, "in onCreate");
        setContentView(R.layout.main);
        mInitBtn = (Button) findViewById(R.id.initBtn);
        mStartBtn = (Button) findViewById(R.id.beginBtn);
        mStopBtn = (Button) findViewById(R.id.stopBtn);
        mPlayBtn = (Button) findViewById(R.id.playRecordingBtn);
        mStopPlayBtn = (Button) findViewById(R.id.stopPlayingRecordingBtn);
        mRecordingMsg = (TextView) findViewById(R.id.recording);
        mVideoView = (VideoView)this.findViewById(R.id.videoView);
    }
    private boolean initCamera() {
        try {
            mCamera  = Camera.open();
            Camera.Parameters camParams = mCamera.getParameters();
            mCamera.lock();
            mCamera.setDisplayOrientation(90);
            mCamera.setParameters(camParams);
            mHolder = mVideoView.getHolder();
            mHolder.addCallback(this);
            mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        }
        catch(RuntimeException re) {
          re.printStackTrace();
          return false;
        }
        return true;
    }
    private void releaseRecorder() {
      if(mRecorder != null) {
        mRecorder.release();
        mRecorder = null;
      }
    }
    private void releaseCamera() {
      if(mCamera != null) {
        try {
        mCamera.reconnect();
      } catch (IOException e) {
        e.printStackTrace();
      }
        mCamera.release();
        mCamera = null;
      }
    }
    @Override
    protected void onResume() {
      super.onResume();
        mInitBtn.setEnabled(false);
        mStartBtn.setEnabled(false);
        mStopBtn.setEnabled(false);
        mPlayBtn.setEnabled(false);
        mStopPlayBtn.setEnabled(false);
      if(!initCamera())
        finish();
    }
    @Override
    protected void onPause() {
        Log.v(TAG, "in onPause");
      super.onPause();
      releaseRecorder();
      releaseCamera();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
    public void doClick(View view) {
      switch(view.getId()) {
      case R.id.initBtn:
            initRecorder();
            break;
      case R.id.beginBtn:
            beginRecording();
            break;
      case R.id.stopBtn:
            stopRecording();
            break;
      case R.id.playRecordingBtn:
            playRecording();
            break;
      case R.id.stopPlayingRecordingBtn:
            stopPlayingRecording();
            break;
      }
    }
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        try {
        mCamera.setPreviewDisplay(mHolder);
          mCamera.startPreview();
        } catch (IOException e) {
      e.printStackTrace();
    }
        mInitBtn.setEnabled(true);
    }
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
    }
  @Override
  public void surfaceChanged(SurfaceHolder holder, int format, int width,
      int height) {
  }
    private void initRecorder() {
        if(mRecorder != null) return;
        mOutputFileName = Environment.getExternalStorageDirectory() +
                               "/videooutput.mp4";
        File outFile = new File(mOutputFileName);
        if(outFile.exists()) {
            outFile.delete();
        }
        try {
          mCamera.stopPreview();
          mCamera.unlock();
            mRecorder = new MediaRecorder();
            mRecorder.setCamera(mCamera);
            mRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
            mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
            mRecorder.setVideoSize(176, 144);
            mRecorder.setVideoFrameRate(15);
            mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            mRecorder.setMaxDuration(7000); // limit to 7 seconds
            mRecorder.setPreviewDisplay(mHolder.getSurface());
            mRecorder.setOutputFile(mOutputFileName);
            mRecorder.prepare();
            Log.v(TAG, "MediaRecorder initialized");
            mInitBtn.setEnabled(false);
            mStartBtn.setEnabled(true);
        }
        catch(Exception e) {
            Log.v(TAG, "MediaRecorder failed to initialize");
            e.printStackTrace();
        }
    }
    private void beginRecording() {
      mRecorder.setOnInfoListener(this);
      mRecorder.setOnErrorListener(this);
        mRecorder.start();
        mRecordingMsg.setText("RECORDING");
        mStartBtn.setEnabled(false);
        mStopBtn.setEnabled(true);
    }
    private void stopRecording() {
        if (mRecorder != null) {
          mRecorder.setOnErrorListener(null);
          mRecorder.setOnInfoListener(null);
          try {
                mRecorder.stop();
          }
          catch(IllegalStateException e) {
          }
          releaseRecorder();
            mRecordingMsg.setText("");
            releaseCamera();
            mStartBtn.setEnabled(false);
            mStopBtn.setEnabled(false);
            mPlayBtn.setEnabled(true);
        }
    }
  private void playRecording() {
        MediaController mc = new MediaController(this);
        mVideoView.setMediaController(mc);
        mVideoView.setVideoPath(mOutputFileName);
        mVideoView.start();
        mStopPlayBtn.setEnabled(true);
    }
    private void stopPlayingRecording() {
      mVideoView.stopPlayback();
    }
  @Override
  public void onInfo(MediaRecorder mr, int what, int extra) {
    if(what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED) {
      stopRecording();
      Toast.makeText(this, "Recording limit has been reached. Stopping the recording",
          Toast.LENGTH_SHORT).show();
    }
  }
  @Override
  public void onError(MediaRecorder mr, int what, int extra) {
    stopRecording();
    Toast.makeText(this, "Recording error has occurred. Stopping the recording",
        Toast.LENGTH_SHORT).show();
  }
}
//main.xml


  android:orientation="vertical" android:layout_width="fill_parent"
  android:layout_height="fill_parent">
      android:layout_height="wrap_content" android:text="Begin Recording"
    android:onClick="doClick"  android:enabled="false" />
      android:layout_height="wrap_content" android:text="Stop Recording"
    android:onClick="doClick" />
      android:layout_height="wrap_content" android:text="Play Recording"
    android:onClick="doClick" />
      android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:text="Stop Playing Recording"
    android:onClick="doClick" />
            android:layout_height="fill_parent"
        android:gravity="center">
        
              android:layout_height="100dip" />