Я пытаюсь записать голос с помощью MediaRecorder, когда входящий и исходящий вызов с телефона. Я реализовал BroadcastReceiver, чтобы знать состояния, когда состояние переходит в состояние OFF-HOOK, оно начинает запись и останавливает запись, когда входит в состояние IDLE.
Я использую приведенный ниже код для записи и сохранения файла на SDCARD.
private static final String AUDIO_RECORDER_FILE_EXT_3GP = ".3gp";
private static final String AUDIO_RECORDER_FILE_EXT_MP4 = ".mp4";
private static final String AUDIO_RECORDER_FOLDER = "AudioRecorder";
private static boolean recordStarted;
private MediaRecorder recorder;
private int currentFormat = 1;
private int output_formats[] = { MediaRecorder.OutputFormat.MPEG_4,
MediaRecorder.OutputFormat.THREE_GPP };
private String file_exts[] = { AUDIO_RECORDER_FILE_EXT_MP4,
AUDIO_RECORDER_FILE_EXT_3GP };
**When the state change to OFFHOOK**
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);
recorder = new MediaRecorder();
//recorder.setMaxDuration(12000);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(output_formats[currentFormat]);
//recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(getFilename());
recorder.setOnErrorListener(errorListener);
recorder.setOnInfoListener(infoListener);
try {
recorder.prepare();
recorder.start();
recordStarted = true;
} catch (IllegalStateException e) {
Log.e("REDORDING :: ",e.getMessage());
e.printStackTrace();
} catch (IOException e) {
Log.e("REDORDING :: ",e.getMessage());
e.printStackTrace();
}
**when the state change to IDLE**
audioManager.setSpeakerphoneOn(false);
try{
if (recordStarted) {
recorder.stop();
recorder.reset();
recorder.release();
recorder = null;
recordStarted = false;
}
}catch(RuntimeException stopException){
}
Код иногда работает хорошо, но иногда нет. Это дает:
Не удалось запустить приемник com.afixi.callmanagement.IncomingCallInterceptor: java.lang.RuntimeException: запуск не выполнен
Когда код работает, он иногда дает безразличный результат, например, иногда, если вызов 1:13, записанный звук составляет 44 секунды. Я пробовал использовать VOICE_CALL вместо MIC, тоже самое.