java.lang.IllegalStateException:适用于Android studio中的MediaRecorder
我在尝试从应用程序中单击录制按钮时遇到非法状态异常。到目前为止,我已经在三台android版本分别为7、9和10的设备上进行了测试。问题是,它在9和10的设备上工作正常,但在7中,一旦我达到记录甚至停止,它就会抛出“IllegalStateException”并导致应用程序崩溃。代码如下:java.lang.IllegalStateException:适用于Android studio中的MediaRecorder,java,android,Java,Android,我在尝试从应用程序中单击录制按钮时遇到非法状态异常。到目前为止,我已经在三台android版本分别为7、9和10的设备上进行了测试。问题是,它在9和10的设备上工作正常,但在7中,一旦我达到记录甚至停止,它就会抛出“IllegalStateException”并导致应用程序崩溃。代码如下: public class VoiceRecorder extends Dialog implements VoiceRecorderInterface { private Button startbt
public class VoiceRecorder extends Dialog implements VoiceRecorderInterface {
private Button startbtn,stopbtn;
// private Button playbtn, stopplay;
private MediaRecorder mRecorder;
private MediaPlayer mPlayer;
private static final String LOG_TAG = "AudioRecording";
private static String mFileName = null;
public static final int REQUEST_AUDIO_PERMISSION_CODE = 1;
Context context;
public HashSet<String> paths =null;
AppPreference preference;
public VoiceRecorder(@NonNull Context context) {
super(context);
this.context = context;
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_voice_recorder);
preference = new AppPreference(context);
paths = new HashSet<>();
startbtn = (Button) findViewById(R.id.btnRecord);
stopbtn = (Button) findViewById(R.id.btnStop);
stopbtn.setEnabled(false);
mFileName =context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)+"/Spares/";
mFileName += "/"+preference.tripData().getTripId()+".3gp";
startbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(CheckPermissions()) {
stopbtn.setEnabled(true);
startbtn.setEnabled(false)
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setOutputFile(mFileName);
try {
mRecorder.prepare();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
}
mRecorder.start();
Toast.makeText(context, "Recording Started", Toast.LENGTH_LONG).show();
}
else
{
RequestPermissions();
}
}
});
stopbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopbtn.setEnabled(false);
startbtn.setEnabled(true);
mRecorder.stop();
mRecorder.release();
mRecorder = null;
paths.add(mFileName);
Databack activity = (Databack) context;
activity.onReturnValue(mFileName);
preference.setPaths(paths);
Toast.makeText(context, "Recording Stopped", Toast.LENGTH_LONG).show();
}
});
//
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_AUDIO_PERMISSION_CODE:
if (grantResults.length> 0) {
boolean permissionToRecord = grantResults[0] == PackageManager.PERMISSION_GRANTED;
boolean permissionToStore = grantResults[1] == PackageManager.PERMISSION_GRANTED;
if (permissionToRecord && permissionToStore) {
Toast.makeText(context, "Permission Granted", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context,"Permission Denied",Toast.LENGTH_LONG).show();
}
}
break;
}
}
public boolean CheckPermissions() {
int result = ContextCompat.checkSelfPermission(context, WRITE_EXTERNAL_STORAGE);
int result1 = ContextCompat.checkSelfPermission(context, RECORD_AUDIO);
return result == PackageManager.PERMISSION_GRANTED && result1 == PackageManager.PERMISSION_GRANTED;
}
private void RequestPermissions() {
ActivityCompat.requestPermissions((Activity) context, new String[]{RECORD_AUDIO, WRITE_EXTERNAL_STORAGE}, REQUEST_AUDIO_PERMISSION_CODE);
}
}
如果我达到记录,我将在以下位置获得豁免:
mRecorder.start()
我们非常感谢您的帮助
E/AndroidRuntime: FATAL EXCEPTION: main
Process: ceo.optionmatrix.com.xpdriver, PID: 19688
java.lang.IllegalStateException
at android.media.MediaRecorder.stop(Native Method)
at ceo.optionmatrix.com.xpdriver.helper.VoiceRecorder$2.onClick(VoiceRecorder.java:100)
at android.view.View.performClick(View.java:5619)
at android.view.View$PerformClick.run(View.java:22298)
at android.os.Handler.handleCallback(Handler.java:754)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:165)
at android.app.ActivityThread.main(ActivityThread.java:6375)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)