Медиа-рекордер останавливается в недопустимом состоянии - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь создать простое приложение, которое записывает звук.Я использую стандарт MediaRecorder для достижения этой цели.Вот что у меня есть:

  1. Я успешно запускаю mediaRecorder, используя этот метод

    public void startRecording(String filePath) throws IOException {
    
    String state = android.os.Environment.getExternalStorageState();
    if (!state.equals(android.os.Environment.MEDIA_MOUNTED)) {
        throw new IOException("SD Card is not mounted.  It is " + state + ".");
    }
    
    // make sure the directory we plan to store the recording in exists
    File directory = new File(filePath).getParentFile();
    if (!directory.exists() && !directory.mkdirs()) {
        throw new IOException("Path to file could not be created.");
    }
    
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC );
    
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    recorder.setOutputFile(filePath);
    
    recorder.setOnErrorListener(errorListener);
    recorder.setOnInfoListener(infoListener);
    
    try {
        recorder.prepare();
    
    } catch (Exception e) {
        Timber.e("Error while prepareing media recorder " + e.getMessage());
    }
    
    try {
    
        recorder.start();
        SharedPrefs.setIsRecording(true);
        Timber.d("Started to record " + SharedPrefs.isRecording());
    
    } catch (Exception e) {
        Timber.e("Error while starting the media recorder " + e.getMessage());
    } }
    

, это работает нормально, и ялокально видно, что файл создан в указанной папке.

Вот что я использую для остановки записи:

public void stopRecording() {

if (recorder == null) {
        Timber.e("recorder is null");
    }

if (SharedPrefs.isRecording()) {

    try {
        recorder.stop();

    } catch (Exception r) {
        Timber.e("Error while attempting to stop " + r.getMessage());
    }

    try {
        recorder.release();

    } catch (Exception e) {
        Timber.e("Error while attempting to release " + e.getMessage());
    }

    Timber.e("We stopped recording");
    SharedPrefs.setIsRecording(false);

} else {
    Timber.e("Attempting to stop recording while not recording ");
} }

Теперь, когда вызывается stopRecording (), я получаю сообщение об ошибке:

 E/MediaRecorder: stop called in an invalid state:1

AudioRecorder: ошибка при попытке остановить null

Примечание. Когда я локально захожу в папку, где находится файл, и обновляю его, я вижу, что размер файла увеличивается.

Заранее спасибо!

...