MediaRecorder.start()上的IllegalStateException

问题描述 投票:0回答:1

早上!

我在生产应用中遇到了一个奇怪的问题。某些用户在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" />

感谢您的帮助。

android illegalstateexception android-mediarecorder
1个回答
0
投票

我通常使用的用例是,创建媒体记录器的实例,并在用户按下按钮时启动。录制完成后,用户按下“停止”按钮,然后释放媒体记录器。

这是我的代码:

private fun startRecording() {

        mRecorder = MediaRecorder()

        try {
            mRecorder.prepare()
            mRecorder.start()
        } catch (e: IOException) {
            e.printStackTrace()
        }   
    }

[当用户按下停止按钮,然后调用stopRecording方法时。

 private fun stopRecording() {
        mRecorder.stop()
        mRecorder.release()

    }

您可以在应用程序中应用的相同。

注意:代码在Kotlin中。

© www.soinside.com 2019 - 2024. All rights reserved.