Android 通话录音下行静音

Android Call Recording Downlink muted

我正在尝试使用 Android 录制上行链路和下行链路语音。不管法律什么的,我已经知道了,所以请不要发表与法律有关的评论。

下面的代码工作正常,除了当我将麦克风静音时,它不会记录下行链路语音。

我正在使用 Android 8.1。我试过在同一台设备上使用名为 ACR 的第三方应用程序,它工作正常,当我静音时,它仍然记录下行链路语音。

 val audioManager = applicationContext.getSystemService(Context.AUDIO_SERVICE) as AudioManager

 val maximumVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL)

 audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, maximumVolume, 0)

 val audioSource = MediaRecorder.AudioSource.MIC

 val mediaRecorder = MediaRecorder()

 mediaRecorder.apply {
            setAudioSource(audioSource)
            setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
            setAudioEncoder(MediaRecorder.AudioEncoder.AAC)
            setAudioChannels(audioChannels)
            setAudioSamplingRate(audioSamplingRate)
            setAudioEncodingBitRate(audioEncodingBitRate)
            setOutputFile(path)
            prepare()
            start()

这不是问题。您将 MediaRecorder 设置为使用 MIC 作为输入,因此如果您将麦克风设为静音,则输入信号是 lost/muted。当您使用 "downlink" 字时,我希望看到不同的输入源作为 VOICECALL 或 DOWNLINK 而不是 MIC。尝试使用 MIC 录制语音通话在我看来是错误的,因为:(1) 您必须为扬声器设置最大音量并通过它重定向语音通话 (2) 在从 MIC 录制语音通话时,呼叫者会听到周围发生的所有事情您的设备以及您对其他人所说的所有内容 (3) 这种方法会记录很多噪音和回声。正确的方法是从 VOICECALL 录音,但大多数新设备(使用较新的 Android 版本)阻止从该来源录音,并且只允许在系统应用程序中录音。 ACR 通过调用隐藏的 API 方法使用变通方法,但由于 Android 更新,此方法可能随时停止工作。