Медиа-рекордер Для записи вызовов некогда не удалось записать другой боковой голос
В моем приложении есть функция записи голосовых вызовов, и она работает отлично. Но при тестировании (Samsung s7, s8) он не работает. Приложение способно записывать только голоса абонентов, а не голос с другого конца. Ниже мой код для проверки, пожалуйста, предложите решение
MediaRecd = new MediaRecorder();
MediaRecd.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL
);
MediaRecd.setAudioChannels(ConstantVariables.audioChannels);//monoRecording
MediaRecd.setAudioEncodingBitRate(64);
MediaRecd.setAudioSamplingRate(44100);
MediaRecd.setOutputFormat(output_formats[pos]);//.mp3
MediaRecd.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//I already try with all possible CAMCORDER , MIC , Default etc etc but none was working
MediaRecd.setOutputFile(Currentfilename);
try {
MediaRecd.prepare();
MediaRecd.start();
} catch (Exception e) {
MediaRecd.reset();
MediaRecd.release();
MediaRecd = null;
}
Ответы
Ответ 1
AudioSource.VOICE_CALL
не работает в некоторых устройствах Android, поэтому
вместо VOICE_CALL
используйте ниже
Сначала попробуйте MediaRecorder.AudioSource.CAMCORDER
MediaRecd = new MediaRecorder();
MediaRecd.setAudioSource(MediaRecorder.AudioSource.CAMCORDER
);
Если выше не работает, чем использовать MediaRecorder.AudioSource.MIC
MediaRecd = new MediaRecorder();
MediaRecd.setAudioSource(MediaRecorder.AudioSource.MIC
);
Ответ 2
Попробуйте этот код. Мне также нужна эта функция, и следующий код работает для меня отлично:
try {
MediaRecorder recorder = new MediaRecorder();
recorder.reset();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
String date = today.monthDay + "_" + (today.month + 1) + "_"
+ today.year;
String time = today.format("%k_%M_%S");
File file = createDirIfNotExists(date + "_" + time);
recorder.setOutputFile(file.getAbsolutePath());
recorder.prepare();
recorder.start();
recordStarted = true;
status = true;
} catch (Exception ex) {
ex.printStackTrace();
}
public File createDirIfNotExists(String path) {
selected_song_name = path;
File folder = new File(Environment.getExternalStorageDirectory()
+ "/PhoneCallRecording");
if (!folder.exists()) {
if (!folder.mkdirs()) {
Log.e("TravellerLog :: ", "folder is created");
}
}
File file = new File(folder, path + ".3GPP");
try {
if (!file.exists()) {
if (file.createNewFile()) {
Log.e("TravellerLog :: ", "file is created");
}
}
} catch (IOException e) {
e.printStackTrace();
}
return file;
}