在安卓手机上录制电话?

IT小君   2021-10-25T02:58:19

我尝试过并使用以下代码记录拨出电话,但它没有..

  @Override
  public void onReceive(Context context, Intent intent) 
  {
          this.context = context;
          if (intent.getAction().equalsIgnoreCase(Intent.ACTION_ANSWER)) 
          {
              try
              {
                  phonenbr = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
                  Log.v("GDHGDHGHDGDHGDHGHDGHDGH", phonenbr);
                  recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                  recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                  recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                  recorder.setOutputFile(pathname);
                  recorder.prepare();
                  recorder.start();
                  recordstarted = 1;
                  telManager= (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
              }
              catch(Exception e)
              {
                  e.printStackTrace();
              }


              final PhoneStateListener phoneListener = new PhoneStateListener()
                {
                    @Override
                     public void onCallStateChanged(final int state, final String incomingNumber)
                        {
                            getTelephonyOverview(telManager);
                        }
                };

           telManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);

}

}

           public void getTelephonyOverview(final TelephonyManager telManager)
           {
                   int callState = telManager.getCallState();
                   switch (callState)
                   {
                    case TelephonyManager.CALL_STATE_IDLE:
                    {
                        if (recordstarted==1)
                        {
                            recorder.stop();
                            recordstarted =0;
                        }
                        break;
                    }
                }
           }

请为这个问题提供一些好的解决方案..

点击广告,支持我们为你提供更好的服务
评论(5)
IT小君

这可以通过 API 级别 8+ 来解决。将媒体录音机的音频源设置为手机上行链路、下行链路或两者。

recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); //Voice downlink/ Uplink
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(AudioEncoder.AAC );

但在这样做之前要注意法律法规。

2021-10-25T02:58:20   回复
IT小君
  1. 在 Android 中你不能很好地记录电话,因为通话中的音频不适用于 SDK 应用程序
  2. ACTION_ANSWER不是广播Intent
2021-10-25T02:58:20   回复
IT小君

您不能简单地通过媒体录音机记录通话。您还必须更改音频管理器的设置并在开始录制之前打开扬声器,音频源将保持不变(麦克风)。因此请尝试编辑音频管理器的设置


AudioManager audiomanager = (AudioManager)context.getSystemService("audio"); 
int i = audiomanager.getRouting(2); 
audiomanager.setMode(2);
audiomanager.setMicrophoneMute(false);
audiomanager.setSpeakerphoneOn(true); 
int j = audiomanager.getStreamMaxVolume(0); 
if(j < 0) 
     j = 1; 
int k = j / 2 + 1; 
audiomanager.setStreamVolume(0, k, 0); 
audiomanager.setRouting(2, 11, 15);
2021-10-25T02:58:20   回复
IT小君

似乎您无法记录来自 API 的调用。一种常见的解决方法是使用免提电话并从麦克风录音 - 在许多设备上,麦克风将通过这种安排充分拾取扬声器。

另一种解决方法是在某处的电话服务上进行录音并通过它路由呼叫。

2021-10-25T02:58:20   回复
IT小君

此代码适用于我记录拨出电话,因此请在此处查看

2021-10-25T02:58:20   回复