title: java.lang.RuntimeException: setAudioSource failed Google Guide Code is throwing error
body: <p>This is my code and actually Google Developer Android Guide's code. But this code throwing error "java.lang.RuntimeException: setAudioSource failed.". I tried all the solutions and it still gives error. </p>
  
  <pre><code>private static final String LOG_TAG = "AudioRecordTest";
  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);  // This row is throwing error. 
      mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
      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;
  }
  
  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 View.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 MainActivity() {
      mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
      mFileName += "/audiorecordtest.mp4";
  }
  
  @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;
      }
  }
  </code></pre>
  
  <p>}</p>
  
  <p>This is my Android Manifest</p>
  
  <pre><code>&lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"&gt;&lt;/uses-permission&gt;
  &lt;uses-permission android:name="android.permission.RECORD_AUDIO"&gt;&lt;/uses-permission&gt;
  
  &lt;application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:supportsRtl="true"
      android:theme="@style/AppTheme"&gt;
      &lt;activity android:name=".MainActivity"&gt;
          &lt;intent-filter&gt;
              &lt;action android:name="android.intent.action.MAIN" /&gt;
  
              &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
          &lt;/intent-filter&gt;
      &lt;/activity&gt;
  &lt;/application&gt;
  </code></pre>
  
  <p></p>
  
  <p>Pls help.  I'm trying solve the problem for three days.</p>