Как решить E / MediaRecorder: остановка вызова в недопустимом состоянии: 4 - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь записать аудио и сохранить его. Проблема в том, что когда я записываю аудио, оно начинается, но при его остановке появляется ошибка:

E / MediaRecorder: останов вызова в недопустимом состоянии: 4

Мой код:

     public void  RecordVoice(){
        recordVoice.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(checkPermissionFromDevice()){
                    pathSave  = Environment.getExternalStorageDirectory().getAbsolutePath() + " /" + UUID.randomUUID().toString() + "_audio_record.3gp";
                    setupMediaRecorder();
                    try {
                        mediaRecorder.prepare();
                        mediaRecorder.start();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    recordVoice.setVisibility(View.GONE);
                    recordVoiceStop.setVisibility(View.VISIBLE);
                    Toast.makeText(getApplicationContext(), "Recording..",Toast.LENGTH_SHORT).show();
                } else {
                    requestPermissionForAudio();
                }
            }
        });

        recordVoiceStop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mediaRecorder != null){
                    mediaRecorder.stop();
                    mediaRecorder.release();
                }
                recordVoice.setVisibility(View.VISIBLE);
                recordVoiceStop.setVisibility(View.GONE);

            }
        });
}
 private void setupMediaRecorder() {
    mediaRecorder = new MediaRecorder();
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
    mediaRecorder.setOutputFile(pathSave);
}

private void requestPermissionForAudio() {
    ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE }, REQUEST_RECORD_VOICE);
}

private boolean checkPermissionFromDevice() {
    int writeExternalStorageDevice = ContextCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE);
    int recordAudioResult = ContextCompat.checkSelfPermission(this,Manifest.permission.RECORD_AUDIO);
    return  writeExternalStorageDevice == PackageManager.PERMISSION_GRANTED && recordAudioResult == PackageManager.PERMISSION_GRANTED;
}

PS: Я дал разрешение в явном виде. Кто-нибудь может помочь мне решить эту проблему? Любое предложение приветствуется. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...