我正在使用 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时,我无法启动录音机(出现错误)
只有系统应用程序可以使用VOICE_CALL。这是出于安全原因。 Android 不允许任何应用程序获取通话音频,OEM 预装的应用程序除外。在 Android 上将通话录音为应用程序的唯一方法是使用普通麦克风,并希望通话的音量足够大以便能够被接听。