Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不断收到错误E/MediaRecorder:在无效状态下调用stop:4,我不确定出了什么问题_Java_Android - Fatal编程技术网

Java 不断收到错误E/MediaRecorder:在无效状态下调用stop:4,我不确定出了什么问题

Java 不断收到错误E/MediaRecorder:在无效状态下调用stop:4,我不确定出了什么问题,java,android,Java,Android,我尝试使用媒体录制器,但它不断给我错误,我添加了权限请求,这是我的清单。当我转到Logcat时,它会说: 2020-04-23 18:23:46.754 12665-12665/com.example.soundmedi E/MediaRecorder: stop called in an invalid state: 4 2020-04-23 18:23:46.754 12665-12665/com.example.soundmedi D/AndroidRuntime: Shutting d

我尝试使用媒体录制器,但它不断给我错误,我添加了权限请求,这是我的清单。当我转到Logcat时,它会说:

2020-04-23 18:23:46.754 12665-12665/com.example.soundmedi E/MediaRecorder: stop called in an invalid state: 4

2020-04-23 18:23:46.754 12665-12665/com.example.soundmedi D/AndroidRuntime: Shutting down VM

2020-04-23 18:23:46.767 12665-12665/com.example.soundmedi E/AndroidRuntime: FATAL EXCEPTION: main


Process: com.example.soundmedi, PID: 12665

java.lang.IllegalStateException

at android.media.MediaRecorder.stop(Native Method)

        at com.example.soundmedi.Activity4$1.onClick(Activity4.java:69)

        at android.view.View.performClick(View.java:7125)

        at android.view.View.performClickInternal(View.java:7102)

        at android.view.View.access$3500(View.java:801)

        at android.view.View$PerformClick.run(View.java:27336)

        at android.os.Handler.handleCallback(Handler.java:883)

        at android.os.Handler.dispatchMessage(Handler.java:100)

        at android.os.Looper.loop(Looper.java:214)

        at android.app.ActivityThread.main(ActivityThread.java:7356)

        at java.lang.reflect.Method.invoke(Native Method)

        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

package com.example.soundmedi;

import android.Manifest;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import java.io.File;
import java.io.IOException;
public class Activity4 extends AppCompatActivity {

    private Button record, stop;
    private MediaRecorder mediaRecorder;
    private String outputFile;
    private boolean permissionToRecordAccepted = false;
    private String [] permissions = {Manifest.permission.RECORD_AUDIO};


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_4);
        record = (Button) findViewById(R.id.record);
        stop = (Button) findViewById(R.id.stop);
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, getPackageManager().PERMISSION_GRANTED);
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, getPackageManager().PERMISSION_GRANTED);

        File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
        File dir = new File(path + "/soundmedi/");
        outputFile = String.valueOf(dir);/**Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.3gp";*/

        mediaRecorder = new MediaRecorder();
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mediaRecorder.setOutputFile("first.3gp");
        mediaRecorder.setOutputFile("/0/Download/soundmedi/");
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);


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

                if (null != mediaRecorder) {
                    try{
                        mediaRecorder.stop();
                        mediaRecorder.reset();
                        mediaRecorder.release();
                        mediaRecorder = null;
                        Toast.makeText(getApplicationContext(), "done", Toast.LENGTH_LONG).show();
                    } catch(RuntimeException stopException) {

                    }
                }

            }
        });

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

                try {
                    mediaRecorder.prepare();
                    mediaRecorder.start();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();// make something
                }
                Toast.makeText(getApplicationContext(), "Recording started", Toast.LENGTH_LONG).show();


                record.setEnabled(false);

                //recording for 10s

                /**final Handler handler = new Handler();
                final boolean b = handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                    }
                }, 10000);*/

            }
        });
    }
}