MediaRecorder instance not released
<p>I am making an android application to record sound. I have been using class MediaRecorder for that. </p>

<p>The recording is done successfully when the recording is done for the first time on any device. But it doesn't work next time. </p>

<p>If I try the code on another machine, recording is done successfully. Is it so because MediaRecorder instance is not getting released by the app even if I am calling method <code>release()</code>.</p>

<p>This is my code-</p>

<pre><code> public class NewClass extends Activity {
private static String sFileName = null;
private static String sFileNameMSD = null;
private static String sPlayFile = null;
public MediaRecorder mRecorder = null;
private String mPn_id;
private String mDescription;
private String mTask_flag;
private String mPatient_name;
private String mPatient_id;
private String mIs_upload = "N";
private Context mContext;
Button btnStart;
Button btnStop;
private int mReuqestcode;
NewClass myActivity;
SeekBar seekBar;
int totalTime;
private final Handler handler = new Handler();
private final String FILE_EXTENTION_AMR = ".amr";
private final String FILE_EXTENTION_MSD = ".msd";
protected boolean recodeFlag = false;;
private static final String TAG = GridAllActivity.class.getName();

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    setContentView(R.layout.transcriptionrecord_activity);
    mContext = this;
    myActivity = this;
    Main.setTitle(myActivity, mContext);

    Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
            mContext));
    TextView txtTitle = (TextView) findViewById(R.id.txt_Title1);
    txtTitle.setText("Transcription");
    TextView txtOption = (TextView) findViewById(R.id.txtOptionName);
    TextView txtPatientName = (TextView) findViewById(R.id.txtPatientName);
    setProperty();
    txtOption.setText("" + mDescription);
    txtPatientName.setText("" + mPatient_name);
}
private void onRecord(boolean start) throws SettingNotFoundException {
    if (start) {
        startRecording();
    } else {
        stopRecording();
        }
}

private void startRecording() throws SettingNotFoundException {
    mRecorder = new MediaRecorder();

    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
    mRecorder.setOutputFile(sFileName);
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    try {

        mRecorder.prepare();

        mRecorder.start();
    } catch (IOException e) {

        recodeFlag=true;
        Log.e("1", "prepare() failed");
        e.printStackTrace();
    }

}

private void stopRecording() throws SettingNotFoundException {

    mRecorder.stop();
    mRecorder.release();
    Log.d("1", "mRecorder released");
    mRecorder = null;
    System.gc();
}

public void setRecordPath() throws IOException {

    sFileName = Environment.getExternalStorageDirectory().getAbsolutePath();

    sFileName += Global.creteFolderPath("IMSEMR" + mTask_flag + "_"
            + mPn_id + FILE_EXTENTION_AMR);
    sFileNameMSD = "IMSEMR" + mTask_flag + "_" + mPn_id
            + FILE_EXTENTION_MSD;
    String state = android.os.Environment.getExternalStorageState();
    if (!state.equals(android.os.Environment.MEDIA_MOUNTED)) {
        Global.alertbox("", "SD Card is not mounted.", mContext);
        throw new IOException("SD Card is not mounted.  It is " + state
                + ".");
    }

    File directory = new File(sFileName).getParentFile();
    if (!directory.exists() &amp;&amp; !directory.mkdirs()) {
        directory.mkdirs();
        throw new IOException("Path to file could not be created.");
    }

}

public void setRecodingLayout() {

    btnStop.setEnabled(false);
    try {
        btnStart.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                boolean mStartRecording = true;
                try {
                    btnStop.setEnabled(true);
                    btnStart.setEnabled(false);
                    onRecord(mStartRecording);

                } catch (SettingNotFoundException e) {
                    e.printStackTrace();
                }

            }
        });         
                    btnStop.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                try {
                boolean mStartRecording = false;
                try {
                    onRecord(mStartRecording);
                } catch (SettingNotFoundException e) {
                    e.printStackTrace();
                }

            } catch (SQLiteException e) {
                // TODO: handle exception
            } catch (Exception e) {
                // TODO: handle exception
            }
                        }
        });

    } catch (NullPointerException e) {

    }
}

public void setProperty() {
    Bundle bundel = getIntent().getExtras();
    mReuqestcode = (Integer) bundel.get("REQUEST_CODE");
    // property for Record
    if (mReuqestcode == 1) {
        mPn_id = (String) bundel.get("PN_ID");
        mDescription = (String) bundel.get("DESCRIPTION");
        mTask_flag = (String) bundel.get("TASK_FLAG");
        mPatient_id = (String) bundel.get("PATIENT_ID");
        mPatient_name = (String) bundel.get("PATIENT_NAME");
        btnStart = (Button) findViewById(R.id.btnStart);
        btnStop = (Button) findViewById(R.id.btnStop);
        btnStop.setEnabled(false);
        setRecodingLayout();
        try {
            setRecordPath();
        } catch (IOException e) {
            e.printStackTrace();
        }
     }
    }
   }
</code></pre>
