Ошибка MediaRecorder.resume: ErrorListener what: 536871012, дополнительно: -1007 - PullRequest
0 голосов
/ 06 ноября 2019

Я использую MediaRecorder.pause и MediaRecorder.resume для приостановки и возобновления записи на экране. Пауза работает нормально, но когда я вызываю MediaRecorder.resume (), произойдет ошибка, обнаруженная моим ErrorListener, и содержание ошибки будет:
what: 536871012, extra: -1007
, и как только эта ошибка будетпоймал, когда я выполняю MediaRecorder.stop () в следующем, появляется остановка не удалось:

java.lang.RuntimeException: остановка не удалась.
в android.media.MediaRecorder.stop (NativeМетод)
... (стек ошибок)

, а также записанное видео не удалось открыть правильно.

Ниже приведены некоторые фрагменты моего кода:

MediaHelper.java:

public void pauseMediaRecorder() {
    // Android officially support this function after Nougat
    if (mMediaRecorder != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
        mMediaRecorder.pause();
}

public void resumeMediaRecorder() {
    // Android officially support this function after Nougat
    if (mMediaRecorder != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        mMediaRecorder.resume();// This line would trigger errors caught by ErrorListener
    }
}

public void stopScreenRecorder(Context context) {
    try{
        if (mMediaRecorder != null) {
            mMediaRecorder.setOnErrorListener(null);
            mMediaRecorder.setOnInfoListener(null);
            mMediaRecorder.setPreviewDisplay(null);
            mMediaRecorder.stop();
            mMediaRecorder.reset();
            mMediaRecorder = null;
        }
    } catch(IllegalStateException illegalStateException) {
        illegalStateException.printStackTrace();
    } catch (RuntimeException runtimeException) {
        try{
            StringWriter errors = new StringWriter();
            runtimeException.printStackTrace(new PrintWriter(errors));
            StringBuilder report = new StringBuilder("Log:\n" + errors.toString() + "\n");
            String fileName = "RuntimeException";
            File file = new File(context.getExternalFilesDir("RuntimeException"), fileName);
            FileOutputStream trace = new FileOutputStream(file);
            trace.write(report.toString().getBytes());
            trace.close();
        } catch (IOException iOException){
            iOException.printStackTrace();
        }
    }
... (other things like stop MediaProjection and release VirtualDisplay)
}

FloatingView.java

CheckBox pauseButton = findViewById(R.id.recording_pause);
pauseButton.setOnCheckedChangeListener((buttonView, isChecked) -> {
    if (isChecked) {
        isPause = false;
        MediaHelper.getInstance().resumeMediaRecorder();
        if(!isPause){
            executorService = Executors.newFixedThreadPool(2);
            executorService.execute(runnable);
        }
    } else {
        MediaHelper.getInstance().pauseMediaRecorder();
        isPause = true;
        executorService.shutdownNow();
    }
    recordTime();// For showing the recorded time info on the view.
    blink();// A red blinking dot makes users knowing it's recording.
});

Более того, ничего плохого не произойдет, если я остановлю запись сразу после выполнения MediaRecorder.pause ().

Я прочитал официальный сайт Android (https://developer.android.com/reference/android/media/MediaRecorder.html),, но информации о возобновлении или паузе не так много, даже эти два состояния не показаны на диаграмме состояний.
И эта ошибка возобновления не отображается при каждом тестировании devices, пока отображается только на одном устройстве.

Кто-нибудь имеет какое-либо представление об этом?

Заранее признателен!

...