【问题标题】:Is it possible in android to record the call during incoming or outgoing callsandroid是否可以在来电或去电期间记录通话
【发布时间】:2012-02-07 06:33:45
【问题描述】:

在 android 中是否可以在不打开手机扬声器的情况下在来电/去电期间录制语音通话。我在 android 市场上看到过一个应用程序。它在不打开扬声器的情况下无法正确录制对方的声音,因为它使用麦克风进行录音。可以通过其他一些技术来完成吗?

final MediaRecorder callrecorder = new MediaRecorder();

callrecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
callrecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
callrecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
callrecorder.setOutputFile(recordPath);
callrecorder.prepare();
callrecorder.start();

【问题讨论】:

  • 是的,有可能,请查看this 链接。您还可以找到用于录制的示例代码。
  • 不打开手机喇叭可以吗?
  • 虽然可以录制,但是在某些国家是非法的,很久以前我们做了一个黑莓应用,但是因为违反了一些隐私法被禁止了。

标签: android


【解决方案1】:

将音频源设置为 MIC 对我有用..

CallRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

但并非所有设备都为通话录音提供硬件支持。参考这个[链接]:http://forum.xda-developers.com/showthread.php?t=926498

结果是,在某些电话中,呼叫者和被呼叫者的声音都被记录下来,而在其他电话中,只有说话者的声音被记录下来。

【讨论】:

    【解决方案2】:

    Android 手机(据我所知)有一个应用处理器和一个调制解调器处理器。当电话处于语音通话中时,音频数据会直接从调制解调器处理器路由(除非硬件发生变化)到音频硬件。应用处理器完全不知道音频数据,而只知道通话状态。

    因此,简而言之,如果没有适当的硬件支持,您将无法录制音频数据。

    【讨论】:

    • 需要哪种类型的硬件支持,而 android 在所有版本中都没有。android 版本也有限制吗?
    • 与安卓版本无关。硬件支持意味着从调制解调器处理器到应用处理器的 PCM 线路。
    • 你可以试试一个叫Cube ACR的应用,它可以清晰地记录通话中的对话。
    【解决方案3】:

    您可以同时查看音频源MediaRecorder.AudioSource.VOICE_DOWNLINKMediaRecorder.AudioSource.VOICE_UPLINK

    这个解决方案对我有用。

    Callrecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_DOWNLINK | MediaRecorder.AudioSource.VOICE_UPLINK);
    

    【讨论】:

      【解决方案4】:

      您可以按如下方式使用 MediaRecorder 类:

      if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
          Log.d(TAGS, "In M" + "In M");
          Toast.makeText(this, "6.0", Toast.LENGTH_SHORT).show();
          recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
          recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
          recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
      } else if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
          Log.d(TAGS, "NNNN" + "NNNN");
          recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
          recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
          recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
      } else if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
          Log.d(TAGS, "N_MR1" + "N_MR1");
          recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
          recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
          recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
      } else if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
          Log.d(TAGS, "O" + "O");
          recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
          recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
          recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
      } else {
          Log.d(TAGS, "ELSE" + "ELSE ");
          recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
          recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
          recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
      }
      

      【讨论】:

        【解决方案5】:

        你需要使用 MediaRecorder 类如下,

        recorder = new MediaRecorder();
        int audioSource = MediaRecorder.AudioSource.VOICE_CALL;
        recorder.setAudioSource(audioSource);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        final String filePath = Environment.getExternalStorageDirectory() + "/record.3gpp";
        final File file = new File(filePath);
        file.getParentFile().mkdirs();
        recorder.setOutputFile(filePath);
        recorder.prepare();
        recorder.start(); // Recording is now started
        

        【讨论】:

        • 不打开手机喇叭可以吗?
        猜你喜欢
        • 1970-01-01
        • 2011-01-17
        • 2011-10-05
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多