Purpose- I'm actually making doorbell kind of app, where on tapping a button ,app rings(plays a small audio) & on holding it app records audio till user holds it. my objective- start recording when user holds button & stops when user releases button.
public class MainActivity extends AppCompatActivity {
private static final String LOG_TAG = "AudioRecordTest";
private Button ring,record;
private String outputfile = null;
private MediaRecorder rec = null;
private static final int REQUEST_RECORD_AUDIO_PERMISSION = 200;
// 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 startrec()
{
Log.e(LOG_TAG, "startRecording:Calling ");
rec = new MediaRecorder();
rec.setAudioSource(MediaRecorder.AudioSource.MIC);
rec.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
rec.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
outputfile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/rec.amr";
rec.setOutputFile(outputfile);
try {
rec.prepare();
rec.start();
} catch (IOException ioe2) {
}
Toast.makeText(MainActivity.this, "RECORDING STARTED", Toast.LENGTH_SHORT).show();
}
private void stoprec(){
rec.stop();rec.release();
Toast.makeText(MainActivity.this, "RECORDING STOPPED", Toast.LENGTH_SHORT).show();
Log.e(LOG_TAG, "stopRecording:Calling ");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ring = findViewById(R.id.ringbutton);
record =findViewById(R.id.recordbutton);
ring.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v1) {
try {
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
r.play();
} catch (IllegalStateException ise) {}
}
});
record.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v2, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) startrec();
else if (event.getAction() == MotionEvent.ACTION_UP) stoprec();
return true;}
});
}
}
Problem- app crashes on touching record button
if u know a better way to do this pls tell.