title: Trying to record audio but getting message "mediarecorder went away with unhandled events" and "Fatal signal 11 (SIGSEGV)...."
body: <p>I am trying to record audio in android but I am facing a problem.</p>
  
  <p>I have start and stop buttons, "start" for starting recording and "stop" for stopping recording. </p>
  
  <p>The problem is, when I press the stop button then my application logs a message "W/MediaRecorder(635): mediarecorder went away with unhandled events". (Start function is saving the audio file properly.)</p>
  
  <p>Then, if I again press start or stop button then I get error message " A/libc(743): Fatal signal 11 (SIGSEGV) at 0x00000010 (code=1), thread 743 (xample.recorder)"</p>
  
  <p>Code of recording class is below:</p>
  
  <pre><code>  /**
     * Creates a new audio recording at the given path (relative to root of SD card).
     */
    public AudioRecorder(String path) {
      this.path = sanitizePath(path);
    }
    private String sanitizePath(String path) {
          if (!path.startsWith("/")) {
            path = "/" + path;
          }
          if (!path.contains(".")) {
            path += ".3gp";
          }
          return Environment.getExternalStorageDirectory().getAbsolutePath() + path;
        }
  
    public void start() throws IOException {
      String state = android.os.Environment.getExternalStorageState();
      if(!state.equals(android.os.Environment.MEDIA_MOUNTED))  {
          throw new IOException("SD Card is not mounted.  It is " + state + ".");
      }
  
      // make sure the directory we plan to store the recording in exists
      File directory = new File(path).getParentFile();
      if (!directory.exists() &amp;&amp; !directory.mkdirs()) {
        throw new IOException("Path to file could not be created.");
      }
  
      recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
      recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
      recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
      recorder.setOutputFile(path);
      try{
      recorder.prepare();
      }
      catch(IOException e){
          Log.e("Recorder","Recording failed");
      }
      recorder.start();
    }
    /**
     * Stops a recording that has been previously started.
     */
    public void stop() throws IOException {
      recorder.stop();
      recorder.release();
    }
  </code></pre>
  
  <p>Code of main activity is below:</p>
  
  <pre><code>  /*
   * */
    public class Recorder extends Activity implements OnClickListener
  
     {
  private static final String TAG="Recorder";
  AudioRecorder ar=new AudioRecorder("/TestAudio.3gp");
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_recorder);
  
      final Button start = (Button) this.findViewById(R.id.btn_start);
      start.setOnClickListener(this);
  
  
      final Button stop = (Button) this.findViewById(R.id.btn_stop);
      stop.setOnClickListener(this);
  
  }
  
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
      getMenuInflater().inflate(R.menu.activity_recorder, menu);
      return true;
  }
  
  public void onClick(View v) {
      // TODO Auto-generated method stub
      try{
           switch (v.getId()) {
              case R.id.btn_start:
                  ar.start();
                  Log.d("Recorder","Recorded");
                  Toast.makeText(this, "Controll returned from start function", Toast.LENGTH_LONG).show();              
                  break;
              case R.id.btn_stop:
                  ar.stop();
                  Toast.makeText(this, "Recording stopped; Starting MediaPlayer", Toast.LENGTH_SHORT).show();
                  //Toast.makeText(this, "Starting media player", Toast.LENGTH_LONG).show();
                  ar.startPlaying();
                  //Toast.makeText(this, "Recording stopped", Toast.LENGTH_LONG).show();
  
                break;
              }
          }
          catch(Exception e){
              Log.e("Recorder", e.getMessage(), e);   
              Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
          }
  
  }
  </code></pre>
  
  <p>}</p>