通话时无法录音

问题描述 投票:0回答:1

我正在使用 React Native 来实现一个 Android 应用程序,帮助我们记录拨出电话。 用户输入电话号码并单击

call
后,我启动 Recorder,然后将用户导航到电话屏幕以拨打电话。

问题是我只在用户拨号之前和之后录制语音。通话期间没有任何内容。

我在诺基亚 C31 (android 12) 上进行了测试

这是我的代码。

import AudioRecorderPlayer, {
  AudioEncoderAndroidType,
  AudioSet,
  AudioSourceAndroidType,
} from 'react-native-audio-recorder-player';
import dayjs from 'dayjs';
import RNFetchBlob from 'rn-fetch-blob';
const dirs = RNFetchBlob.fs.dirs;

const audioSet: AudioSet = {
  AudioEncoderAndroid: AudioEncoderAndroidType.DEFAULT,
  AudioSourceAndroid: AudioSourceAndroidType.VOICE_COMMUNICATION,
};

export default function Dialer() {
  // other states...
  const audioRecorderPlayer = useRef(new AudioRecorderPlayer());

  const startRecording = async () => {
    const formattedDate = dayjs().format('DD-MMM-YYYY_hh-mm-ss-A');
    const fileName = `${dirs.CacheDir}/call-record_${formattedDate}.mp3`;
    console.log(fileName);
    setAudioPath(fileName);
    try {
      setIsRecording(true);
      const result = await audioRecorderPlayer.current.startRecorder(
        fileName,
        audioSet,
        true,
      );
      console.log('start recording', result);
    } catch (error) {
      console.error('Error starting recording:', error);
    }
  };

  const handleCall = () => {
    if (!isRecording) {
      startRecording();
      console.log('called');
      Linking.openURL(`tel:${number}`);
    }
  };
//...
}

请求权限

const permissions = [
  PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
  PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
  PermissionsAndroid.PERMISSIONS.RECORD_AUDIO,
  PermissionsAndroid.PERMISSIONS.CALL_PHONE,
];

这是我的清单

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />

我想我需要使用 VOICE_CALL 而不是 VOICE_COMMUNICATION。

但 VOICE_CALL 需要

android.permission.CAPTURE_AUDIO_OUTPUT

根据文档:

This permission is reserved for use by system components and is not available to third-party applications.

当我使用VOICE_CALL时,我无法启动录音机(出现错误)

android react-native audio-recording android-audiorecord
1个回答
0
投票

只有系统应用程序可以使用VOICE_CALL。这是出于安全原因。 Android 不允许任何应用程序获取通话音频,OEM 预装的应用程序除外。在 Android 上将通话录音为应用程序的唯一方法是使用普通麦克风,并希望通话的音量足够大以便能够被接听。

© www.soinside.com 2019 - 2024. All rights reserved.