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

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -

How to provide Authorization & Authentication using Asp.net, C#? -