Java 不断收到错误E/MediaRecorder:在无效状态下调用stop:4,我不确定出了什么问题
我尝试使用媒体录制器,但它不断给我错误,我添加了权限请求,这是我的清单。当我转到Logcat时,它会说: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
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);*/
}
});
}
}