Last active
September 9, 2018 15:08
-
-
Save OrenBochman/e7c027026c1c083abb76f65858484bce to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.android.audiorecordtest; | |
import android.Manifest; | |
import android.content.Context; | |
import android.content.pm.PackageManager; | |
import android.media.MediaPlayer; | |
import android.media.MediaRecorder; | |
import android.os.Bundle; | |
import android.support.annotation.NonNull; | |
import android.support.v4.app.ActivityCompat; | |
import android.support.v7.app.AppCompatActivity; | |
import android.util.Log; | |
import android.view.View; | |
import android.view.ViewGroup; | |
import android.widget.Button; | |
import android.widget.LinearLayout; | |
import java.io.IOException; | |
public class AudioRecordTest extends AppCompatActivity { | |
private static final String LOG_TAG = "AudioRecordTest"; | |
private static final int REQUEST_RECORD_AUDIO_PERMISSION = 200; | |
private static String mFileName = null; | |
private RecordButton mRecordButton = null; | |
private MediaRecorder mRecorder = null; | |
private PlayButton mPlayButton = null; | |
private MediaPlayer mPlayer = null; | |
// Requesting permission to RECORD_AUDIO | |
private boolean permissionToRecordAccepted = false; | |
private String [] permissions = {Manifest.permission.RECORD_AUDIO}; | |
@Override | |
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { | |
super.onRequestPermissionsResult(requestCode, permissions, grantResults); | |
switch (requestCode){ | |
case REQUEST_RECORD_AUDIO_PERMISSION: | |
permissionToRecordAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED; | |
break; | |
} | |
if (!permissionToRecordAccepted ) finish(); | |
} | |
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; | |
} | |
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); | |
} | |
} | |
@Override | |
public void onCreate(Bundle icicle) { | |
super.onCreate(icicle); | |
// Record to the external cache directory for visibility | |
mFileName = getExternalCacheDir().getAbsolutePath(); | |
mFileName += "/audiorecordtest.3gp"; | |
ActivityCompat.requestPermissions(this, permissions, REQUEST_RECORD_AUDIO_PERMISSION); | |
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 onStop() { | |
super.onStop(); | |
if (mRecorder != null) { | |
mRecorder.release(); | |
mRecorder = null; | |
} | |
if (mPlayer != null) { | |
mPlayer.release(); | |
mPlayer = null; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment