android - On Call HangUp, Media Recorder does not stop and save the recorded call -
i'm new android programming. trying build call recorder. able detect incoming calls , start media recorder , record voice. on call disconnect, stop() method not trigger. stops when close app. working except stop(). when close app recordings saved. how stop() recording after call disconnected?
import android.content.broadcastreceiver; import android.content.context; import android.content.intent; import android.media.mediarecorder; import android.os.environment; import android.telephony.telephonymanager; import java.io.ioexception; import java.util.calendar; public class ncallreceiver extends broadcastreceiver { @override public void onreceive(context context, intent intent) { mediarecorder callrecorder = new mediarecorder(); if (intent.getstringextra(telephonymanager.extra_state).equals(telephonymanager.extra_state_ringing)) { string incomingnumber = intent.getstringextra(telephonymanager.extra_incoming_number); calendar c = calendar.getinstance(); int tm = c.get(calendar.date); int tx = c.get(calendar.second); string timex = tm+"-"+tx; callrecorder.setaudiosource(mediarecorder.audiosource.mic); callrecorder.setoutputformat(mediarecorder.outputformat.mpeg_4); callrecorder.setaudioencoder(mediarecorder.audioencoder.amr_nb); callrecorder.setoutputfile(environment.getexternalstoragedirectory().getabsolutepath() + "/" + incomingnumber +"-"+ timex+"-"+tx+".mp4"); try { callrecorder.prepare(); } catch (ioexception e) { e.printstacktrace(); } callrecorder.start(); if (intent.getstringextra(telephonymanager.extra_state).equals(telephonymanager.extra_state_idle) || intent.getstringextra(telephonymanager.extra_state).equals( telephonymanager.extra_state_offhook)) { callrecorder.stop(); callrecorder.release(); } } } } **
edit 2
** how stop() media recorder? tried instantiating
mediarecorder r;
globally but,
r.stop()
does not work, because r not instantiated.
if possible save state of mediarecorder instance, , use stop method later on, how do it?
public class ncallrecorder extends broadcastreceiver { @override public void onreceive(context context, intent intent) { if (intent.getstringextra(telephonymanager.extra_state).equals(telephonymanager.extra_state_ringing)) { //start recording string callno = intent.getstringextra(telephonymanager.extra_incoming_number); mediarecorder r = new mediarecorder(); r.setaudiosource(mediarecorder.audiosource.mic); r.setoutputformat(mediarecorder.outputformat.mpeg_4); r.setaudioencoder(mediarecorder.audioencoder.amr_nb); r.setoutputfile(environment.getexternalstoragedirectory().getabsolutepath()+"/"+callno+".mp4"); try { r.prepare(); } catch(ioexception e) { e.printstacktrace(); } r.start(); } else if (intent.getstringextra(telephonymanager.extra_state).equals(telephonymanager.extra_state_idle)) { //stop recording toast.maketext(context,"call ends",toast.length_long).show(); } } }
the check whether state has changed idle appears inside if intent.getstringextra(telephonymanager.extra_state).equals(telephonymanager.extra_state_ringing)) {. want instead:
if (intent.getstringextra(telephonymanager.extra_state).equals(telephonymanager.extra_state_ringing)) { // start recording } else if (intent.getstringextra(telephonymanager.extra_state).equals(telephonymanager.extra_state_idle) { // stop recording } also, you're creating new mediarecorder instance every time broadcastreceiver invoked. should create mediarecorder instance when start recording, , save instance can stop later on.
another minor thing have intent.getstringextra(telephonymanager.extra_state).equals(telephonymanager.extra_state_offhook) in condition whether recording should stopped. "off-hook" doesn't mean you've hung up; means "at least 1 call exists dialing, active, or on hold".
Comments
Post a Comment