Опитвам се да запиша гласа с помощта на 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, той също прави същото.