Android studio MediaRecorder在.start()上出现异常错误,不记录任何内容

Android studio MediaRecorder在.start()上出现异常错误,不记录任何内容,android-studio,exception,mediarecorder,Android Studio,Exception,Mediarecorder,我正在制作一个简单的录音应用程序。当我点击“麦克风”按钮(意思是录制)时,突出显示的祝酒词就会出现。如果我删除了try/catch,应用程序会崩溃并出现异常 这个问题似乎很常见,但我没有找到解决方案 这是我的主要活动代码 public class MainActivity extends AppCompatActivity { Button microphone, play, stopRecording, stopPlay; String outputFile = "

我正在制作一个简单的录音应用程序。当我点击“麦克风”按钮(意思是录制)时,突出显示的祝酒词就会出现。如果我删除了try/catch,应用程序会崩溃并出现异常

这个问题似乎很常见,但我没有找到解决方案

这是我的主要活动代码

public class MainActivity extends AppCompatActivity {

    Button microphone, play, stopRecording, stopPlay;
    String outputFile = "";
    MediaRecorder myAudioRecorder;
    MediaPlayer mediaPlayer;

    final int REQUEST_PERMISSION_CODE = 1000;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (!checkPermission()){
            requestPermission();
        }

        microphone = findViewById(R.id.microphone);
        play = findViewById(R.id.play);
        stopPlay = findViewById(R.id.stopPlay);
        stopRecording = findViewById(R.id.stopRecording);

        play.setEnabled(false);
        stopPlay.setEnabled(false);
        stopRecording.setEnabled(false);

        microphone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (checkPermission()){
                    outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + UUID.randomUUID().toString()+"_recording.3gp";
                    setUpMediaRecorder();
                    try {
                    myAudioRecorder.prepare();
                    myAudioRecorder.start();
                    Toast.makeText(getApplicationContext(), "Recording started", Toast.LENGTH_LONG).show();
                } catch (IllegalStateException ise) {
                    Toast.makeText(getApplicationContext(), "Illegal state exception", Toast.LENGTH_LONG).show();
                } catch (IOException ioe) {
                    Toast.makeText(getApplicationContext(), "THIS TOAST SHOWS ON CLICKING START WHICH MEANS IOEXCEPTION", Toast.LENGTH_LONG).show();
                }
                stopRecording.setEnabled(true);


            } else{
                    requestPermission();
                }
            }
        });

        stopRecording.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    myAudioRecorder.stop();
                    myAudioRecorder.release();
                    myAudioRecorder = null;
                    microphone.setEnabled(true);
                    stopRecording.setEnabled(false);
                    play.setEnabled(true);

                    Toast.makeText(getApplicationContext(), "Recording stopped", Toast.LENGTH_LONG).show();

            }
        });

        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mediaPlayer = new MediaPlayer();
                try {
                    mediaPlayer.setDataSource(outputFile);
                    mediaPlayer.prepare();
                }catch (Exception e){
                    // What
                }
                mediaPlayer.start();
            }
        });

        stopPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mediaPlayer.isPlaying()){
                    mediaPlayer.stop();
                    mediaPlayer.release();
                    setUpMediaRecorder();
                }
            }
        });

    }

    private void setUpMediaRecorder (){
        myAudioRecorder = new MediaRecorder();
        myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
        myAudioRecorder.setOutputFile(outputFile);
    }

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

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode)
        {
            case REQUEST_PERMISSION_CODE:
            {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
                Toast.makeText(getApplicationContext(),"Permission Granted", Toast.LENGTH_SHORT).show();
                else
                    Toast.makeText(getApplicationContext(),"Permission D", Toast.LENGTH_SHORT).show();
            }
                break;
            }
        }

        private boolean checkPermission(){
        // code to check permission

    }

我在清单文件中添加了存储和录制音频权限,因此我不确定哪里出了问题。任何帮助都将不胜感激