Monday, 29 April 2013

Audio Record and Attached with mail in android


import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;


public class AudioCaptureDemo extends Activity
{
      private static final String LOG_TAG = "AudioCaptureDemo";
      private static String mFileName = null;

      private RecordButton mRecordButton = null;
      private MediaRecorder mRecorder = null;

      private PlayButton   mPlayButton = null;
      private MediaPlayer   mPlayer = null;

      private void onRecord(boolean start) {
            if (start) {
                  startRecording();
            } else {
                  stopRecording();
            }
      }

      private void onPlay(boolean start) {
            if (start) {
                  startPlaying();
            } else {
                  stopPlaying();
            }
      }

      private void startPlaying() {
            mPlayer = new MediaPlayer();
            try {
                  mPlayer.setDataSource(mFileName);
                  mPlayer.prepare();
                  mPlayer.start();
            } catch (IOException e) {
                  Log.e(LOG_TAG"prepare() failed");
            }
      }

      private void stopPlaying() {
            mPlayer.release();
            mPlayer = null;
      }

      private void startRecording() {
            mRecorder = new MediaRecorder();
            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            mRecorder.setOutputFile(mFileName);
            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

            try {
                  mRecorder.prepare();
            } catch (IOException e) {
                  Log.e(LOG_TAG"prepare() failed");
            }

            mRecorder.start();
      }

      private void stopRecording() {
            mRecorder.stop();
            mRecorder.release();
            mRecorder = null;
            ArrayList<String> uris = new ArrayList<String>();
            mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
            mFileName += "/audiorecordtest.3gp";
            uris.add(mFileName);
            email(AudioCaptureDemo.this,"test@test.com","No Subject","Sample Email text",uris);
      }

      public static void email(Context context, String emailTo, String emailCC,
                  String subject, String emailText, List<String> filePaths)
      {
            //need to "send multiple" to get more than one attachment
            final Intent emailIntent = newIntent(android.content.Intent.ACTION_SEND_MULTIPLE);
            emailIntent.setType("plain/text");
            emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
                        new String[]{emailTo});
            emailIntent.putExtra(android.content.Intent.EXTRA_CC,
                        new String[]{emailCC});
            //has to be an ArrayList
            ArrayList<Uri> uris = new ArrayList<Uri>();
            //convert from paths to Android friendly Parcelable Uri's
            for (String file : filePaths)
            {
                  File fileIn = new File(file);
                  Uri u = Uri.fromFile(fileIn);
                  uris.add(u);
            }
            emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
            context.startActivity(Intent.createChooser(emailIntent, "Send mail..."));
      }

      class RecordButton extends Button {
            boolean mStartRecording = true;

            OnClickListener clicker = new OnClickListener() {
                  public void onClick(View v) {
                        onRecord(mStartRecording);
                        if (mStartRecording) {
                              setText("Stop recording");
                        } else {
                              setText("Start recording");
                        }
                        mStartRecording = !mStartRecording;
                  }
            };

            public RecordButton(Context ctx) {
                  super(ctx);
                  setText("Start recording");
                  setOnClickListener(clicker);
            }
      }

      class PlayButton extends Button {
            boolean mStartPlaying = true;

            OnClickListener clicker = new OnClickListener() {
                  public void onClick(View v) {
                        onPlay(mStartPlaying);
                        if (mStartPlaying) {
                              setText("Stop playing");
                        } else {
                              setText("Start playing");
                        }
                        mStartPlaying = !mStartPlaying;
                  }
            };

            public PlayButton(Context ctx) {
                  super(ctx);
                  setText("Start playing");
                  setOnClickListener(clicker);
            }
      }

      public AudioCaptureDemo() {
            mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
            mFileName += "/audiorecordtest.3gp";
      }

      @Override
      public void onCreate(Bundle icicle) {
            super.onCreate(icicle);

            LinearLayout ll = new LinearLayout(this);
            mRecordButton = new RecordButton(this);
            ll.addView(mRecordButton,
                        new LinearLayout.LayoutParams(
                                    ViewGroup.LayoutParams.WRAP_CONTENT,
                                    ViewGroup.LayoutParams.WRAP_CONTENT,
                                    0));
            mPlayButton = new PlayButton(this);
            ll.addView(mPlayButton,
                        new LinearLayout.LayoutParams(
                                    ViewGroup.LayoutParams.WRAP_CONTENT,
                                    ViewGroup.LayoutParams.WRAP_CONTENT,
                                    0));
            setContentView(ll);
      }

      @Override
      public void onPause() {
            super.onPause();
            if (mRecorder != null) {
                  mRecorder.release();
                  mRecorder = null;
            }

            if (mPlayer != null) {
                  mPlayer.release();
                  mPlayer = null;
            }
      }
}