【发布时间】:2020-01-31 19:41:10
【问题描述】:
早上好!
我在制作应用时遇到了一个奇怪的问题。一些用户在 MediaRecorder 启动时收到 IllegalStateException。我无法在我拥有的少数设备甚至模拟器上重现该问题。此错误发生在不同的版本和设备上(Android 5 到 10 以及各种设备),并且出现次数很多。
这里是代码
if (mRecorder == null) {
mRecorder = new MediaRecorder();
} else {
try {
mRecorder.stop();
} catch (Exception e) {}
}
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mRecorder.setAudioSamplingRate(44100);
mRecorder.setAudioEncodingBitRate(128000);
mRecorder.setOutputFile(mSoundFile.getAbsolutePath());
mRecorder.setAudioChannels(1);
mRecorder.setMaxDuration(mMaxDurationInMs);
mRecorder.prepare();
mRecorder.start();
还有堆栈跟踪
java.lang.IllegalStateException: null
at android.media.MediaRecorder.native_start(MediaRecorder.java)
at android.media.MediaRecorder.start(MediaRecorder.java:1603)
at de.boxine.someapp.util.media.VoiceRecorder.start(VoiceRecorder.java:115)
at de.boxine.someapp.recording.audio.RecordAudioPresenter.startRecording(RecordAudioPresenter.java:186)
at de.boxine.someapp.recording.audio.RecordAudioPresenter.startRecordingByAvailableSource(RecordAudioPresenter.java:204)
at de.boxine.someapp.recording.audio.RecordAudioPresenter.access$500(RecordAudioPresenter.java:27)
at de.boxine.someapp.recording.audio.RecordAudioPresenter$2.onPermissionGranted(RecordAudioPresenter.java:116)
at de.boxine.someapp.mvp.AbstractPresenter.checkPermissionBeforeRun(AbstractPresenter.java:67)
at de.boxine.someapp.recording.audio.RecordAudioPresenter.onRecordButtonClicked(RecordAudioPresenter.java:108)
at de.boxine.someapp.recording.audio.RecordAudioFragment.lambda$onCreateView$0$RecordAudioFragment(RecordAudioFragment.java:112)
at de.boxine.someapp.recording.audio.-$$Lambda$RecordAudioFragment$9H7EZrHdPKO0BFbM_UTVYf_SFBU.onClick
at android.view.View.performClick(View.java:6659)
at android.view.View.performClickInternal(View.java:6631)
at android.view.View.access$3100(View.java:790)
at android.view.View$PerformClick.run(View.java:26187)
at android.os.Handler.handleCallback(Handler.java:907)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7625)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
我的清单中也有这些权限(我在最近的 Android 版本上实时询问他们)
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
感谢您的帮助。
【问题讨论】:
-
你能在它抛出 IllegalStateException 时添加你的错误日志吗?
-
@Jaymin 我添加了它
-
是你的申请录音电话吗?? @DenisPinna
-
停止后是重置还是释放录音机?
-
不,是用户在应用中点击的按钮实时记录。
标签: android illegalstateexception android-mediarecorder