为什么MediaRecorder的start()方法会抛出IllegalStateException?

发布于 2024-10-20 11:32:06 字数 785 浏览 1 评论 0原文

我正在尝试录制音频,但 MediaRecorder 类的 start() 方法抛出 IllegalStateException。 我使用以下代码:

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile("/sdcard/");
try {
    recorder.prepare();
} catch (IllegalStateException e) {

// TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
Log.i("Try","Exception");
recorder.start(); 

和以下权限

<uses-permission android:name="android.permission.RECORD_AUDIO" />

I am trying to record audio but the start() method of MediaRecorder class throws an IllegalStateException.
I use the following code:

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile("/sdcard/");
try {
    recorder.prepare();
} catch (IllegalStateException e) {

// TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
Log.i("Try","Exception");
recorder.start(); 

And following permission

<uses-permission android:name="android.permission.RECORD_AUDIO" />

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

断念 2024-10-27 11:32:06

recorder.setOutputFile("/sdcard/"); 设置的是目录,而不是文件。

将其替换为:

mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName += "/youraudiofile.3gp";

使用“/sdcard”对脆弱的路径进行硬编码,因此请使用上面的内容。

另外,要使其工作,您必须添加

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

到 AndroidManifest.xml

recorder.setOutputFile("/sdcard/"); is setting a directory, not a file.

Replace that with:

mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName += "/youraudiofile.3gp";

Using "/sdcard" hard codes a path which is fragile, so use the above.

Also, for this to work you must add

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

to your AndroidManifest.xml

情绪少女 2024-10-27 11:32:06

当未调用MediaRecorder.prepare方法、或在MediaRecorder.start之后调用、或在配置音视频源之前调用时,会抛出IllegalstateException,格式和编码器。

Android文档中相机开发指南中提到的正确配置顺序:

  1. 相机到媒体记录器的相机解锁
  2. 控制-> setCamera
  3. 设置音视频源、格式、编码器
  4. 准备
  5. 开始

IllegalstateException is thrown when the MediaRecorder.prepare method is not called, or called after MediaRecorder.start, or called before configuring audio/video sources, format and encoders.

The correct order of configuration mentioned in camera developer guide in the Android documentation:

  1. camera unlock
  2. control of camera to media recorder -> setCamera
  3. set audio/video source, format,encoder
  4. prepare
  5. start
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文