在三星设备(例如Galaxy A7、Galaxy A10s等)上,MediaRecorder.Stop()会失败。

4

我正在使用以下设置来初始化MediaRecorder。我的应用在大多数设备上工作正常,但在三星设备上,在MediaRecorder.stop()时出现错误。

    recorder = new MediaRecorder();
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    recorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
    recorder.setAudioEncodingBitRate(16*44100);
    recorder.setAudioSamplingRate(44100);

它会抛出以下错误信息。

java.lang.IllegalStateException: 
at android.media.MediaRecorder._stop (MediaRecorder.java)
at android.media.MediaRecorder.stop (MediaRecorder.java:1440)
at com.appname.stopRecording (add_new.java:4)`

这可能是因为我在三星设备上使用MIC作为音频源而不是VOICE_CALL导致的。


你最终解决了这个问题吗?我也遇到了同样的情况,而且只在三星手机上出现。 - anotherdave
  1. 请添加完整的堆栈跟踪和一些额外的代码。
  2. 检查 prepare() 是否成功执行。
  3. 最后,如果停止时出现IllegalstateException,则我认为您的start()没有正确启动。
- Debu
1个回答

2

尝试用这种方法做。

recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
recorder.setAudioEncodingBitRate(16*44100);
recorder.setAudioSamplingRate(44100);
recorder.prepare();
recorder.start();   // Recording is now started

如果你还没有开始,那么当你想停止时,请按照以下方式进行。

recorder.stop();
recorder.reset();   // You can reuse the object by going back to setAudioSource() step
recorder.release(); // Now the object cannot be reused

所以,如果您在调用recorder.start()之前调用recorder.stop(),它将显示异常。同时,请检查是否已在清单中添加了权限:
<uses-permission android:name="android.permission.RECORD_AUDIO" />

至少在我的使用情况下,上述所有内容都是正确的(除了编解码器/格式的差异)——它可以在所有设备上运行,但在三星设备上遇到了问题。 - anotherdave
请尝试访问以下链接,它可能会有所帮助。否则,请分享代码,以便我可以进一步协助您。 https://dev59.com/arnoa4cB1Zd3GeqPNEPF#60235317 - Hascher
@anotherdave请看下面我的回答。 - Usama Altaf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接