Я не могу записать свой голос после телефонного звонка

#android #service #broadcastreceiver #audio-recording

Вопрос:

Я разработал приложение для Android для записи звука при звонке телефона. Я знаю, что не могу записать звук звонящего, но я хочу записать свой голос, когда отвечал на звонок или начинал разговор с другим человеком. Я могу сделать это на некоторых устройствах, но на некоторых устройствах, когда мой телефон начинает звонить, голос записывается, но после того, как я ответил на звонок, я не могу записать ни одного голоса. Или мой голос записывается, когда я начинаю звонить человеку, но после того, как человек ответил мне, запись голоса прекращается!

Я использую приведенный ниже код:

  private void startRecord(){
        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);*/

        mRecorder.setOutputFile(savePath);
   }
 

Приемник вещания:

  private final PhoneStateListener phoneListener = new PhoneStateListener() {
    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        super.onCallStateChanged(state, incomingNumber);
        //Toast.makeText(context,"phoneListener Start",Toast.LENGTH_LONG).show();
        try {
            switch (state) {
                case TelephonyManager.CALL_STATE_RINGING: {
                    startedCall = true;
                    //Toast.makeText(context,"CALL_STATE_RINGING",Toast.LENGTH_LONG).show();
                    if (incomingNumber != null) {
                        //incoming call
                        //Toast.makeText(context,"Go to start forground service->ringing",Toast.LENGTH_LONG).show();
                        startForegroundService(incomingNumber);
                    }
                    break;
                }
                case TelephonyManager.CALL_STATE_OFFHOOK: {
                    //Toast.makeText(context,"CALL_STATE_OFFHOOK",Toast.LENGTH_LONG).show();
                    startedCall = true; // Newly added code
                    if (incomingNumber != null) {

                        //Toast.makeText(context,"Go to start forground service->OffHook",Toast.LENGTH_LONG).show();
                        //outgoing call
                        startForegroundService(incomingNumber);
                    }
                    break;
                }
                case TelephonyManager.CALL_STATE_IDLE: {
                    //Toast.makeText(context,"CALL_STATE_IDLE",Toast.LENGTH_LONG).show();
                    if (startedCall) {
                        stopForegroundService();
                    }
                    break;
                }
                default: {
                }
            }
        } catch (Exception ex) {

        }
    }
};