【问题标题】:Outgoing call recording audio file has no sound去电录音音频文件没有声音
【发布时间】:2020-08-23 10:16:04
【问题描述】:

录制拨出电话后,我正在尝试播放录制的文件 - 以确保通话录音按预期工作(我正在使用“MediaPlayer”),但没有声音。 所以我尝试访问手机上的实际文件(只需将手机连接到计算机并访问它的文件)。当我播放它时,它的长度是正确的,但又没有声音。

我错过了什么?

这是我记录电话的方式:

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
// recorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

File callAudioFile = null;
try {
    File downloadsDir = context.getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
    callAudioFile = File.createTempFile("deTuCelRecord", ".amr", downloadsDir);
} catch (IOException e) {
    e.printStackTrace();
}
assert callAudioFile != null;
audioFilePath = callAudioFile.getAbsolutePath();

recorder.setOutputFile(audioFilePath);
try {
    recorder.setOnErrorListener(new MediaRecorder.OnErrorListener() {
        @Override
        public void onError(MediaRecorder mr, int what, int extra) {
            Log.e("MediaRecorder", "MediaRecorder error " + what + " " + extra);
        }
    });
    recorder.prepare();
} catch (IllegalStateException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

recorder.start();

这是结束通话录音的代码:

recorder.stop();
recorder.release();

这就是我播放音频文件的方式:

MediaPlayer mPlayer = new MediaPlayer();
try {
    mPlayer.setDataSource(audioFilePath);
    mPlayer.prepare();
    Toast.makeText(getApplicationContext(), "PLAYING AUDIO", Toast.LENGTH_LONG).show();
    mPlayer.start();
    Log.d("PLAY_AUDIO", "Started playing audio");
} catch (IOException e) {
    Log.e("PLAY_AUDIO", "Failed to play audio");
}

【问题讨论】:

    标签: java android


    【解决方案1】:

    请在您的测试手机中查看此Accessibilty Service

    如果您尝试在 Android Q 上录制通话。 请参考this link

    你可以试试 recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); 需要Manifest.permission.CAPTURE_AUDIO_OUTPUT 权限。

    请查看AudioSource Source documentation for difference between VOICE_CALL and VOICE_COMMUNICATION

    【讨论】:

    • 我尝试使用 recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL),但它导致失败:接收广播 Intent 时出错 { act=android.intent.action.PHONE_STATE flg=0x1000010 (has extras) }在 com.android.detucel.TService$CallBr@7e3380c 这似乎与权限有关,无论我做什么我都无法获得正确的权限。我确实添加了 CAPTURE_AUDIO_OUTPUT 权限。
    【解决方案2】:

    问题在于 android 版本 - 从 android 10 开始,它不允许我记录通话,但在 android 9 上它可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多