Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >安卓- MediaRecorder抛出非法状态异常

安卓- MediaRecorder抛出非法状态异常
EN

Stack Overflow用户
提问于 2012-09-06 21:04:17
回答 2查看 15.6K关注 0票数 5

我正在尝试开发一个简单的安卓音频recorder.Everything构建良好,它也可以在安卓设备上运行良好。似乎我可以开始录制,但是当我想要停止它时,会抛出一个IllegalStateException。我找不到错误所在。代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class VoiceRecorder {
MediaRecorder recorder= new MediaRecorder();
static Context cont;

public void startRecord(Context context) throws IllegalStateException, IOException{
    cont = context;

    recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    recorder.setOutputFile(cont.getFilesDir()+"/recordings.3gp"); 
    recorder.prepare();
    recorder.start();  

 }  
public void stopRecording(Context context) {
    cont = context;
    recorder.stop();
    recorder.release();
    File file = new File (cont.getFilesDir()+"/recordings.3gp");
    UploadFile.uploadFile("recordings.3gp", file);
    recorder = null;
 }
}

我想用以下命令来触发它:

新建vr = VoiceRecorder VoiceRecorder();

Vr.startRecord(续);

Vr.stopRecording(续);

当调用start Logcat时会说:(什么应该没问题)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
09-06 22:56:42.830: D/AudioHardwareMSM72XX(123): audpre_index = 0, tx_iir_index = 0
09-06 22:56:42.840: D/HTC Acoustic(123): msm72xx_enable_audpre: 0x0000
09-06 22:56:42.850: I/AudioHardwareMSM72XX(123): Routing audio to Speakerphone
09-06 22:56:42.850: D/HTC Acoustic(123): msm72xx_enable_audpp: 0x0001
09-06 22:56:42.850: I/AudioHardwareMSM72XX(123): Routing audio to Speakerphone
09-06 22:56:42.860: D/HTC Acoustic(123): msm72xx_enable_audpp: 0x0001
09-06 22:56:42.870: D/AudioFlinger(123): setParameters(): io 3, keyvalue routing=262144;vr_mode=0, tid 156, calling tid 123
09-06 22:56:42.870: I/AudioHardwareMSM72XX(123): Routing audio to Speakerphone
09-06 22:56:42.880: D/AudioHardwareMSM72XX(123): audpre_index = 0, tx_iir_index = 0
09-06 22:56:42.880: D/HTC Acoustic(123): msm72xx_enable_audpre: 0x0000
09-06 22:56:42.880: I/AudioHardwareMSM72XX(123): do input routing device 40000
09-06 22:56:42.880: I/AudioHardwareMSM72XX(123): Routing audio to Speakerphone
09-06 22:56:42.890: D/HTC Acoustic(123): msm72xx_enable_audpp: 0x0001

但是当我调用stop时:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
09-06 22:59:52.440: E/MediaRecorder(1069): stop called in an invalid state: 1
09-06 22:59:52.440: W/System.err(1069): java.lang.IllegalStateException
09-06 22:59:52.460: W/System.err(1069):     at android.media.MediaRecorder.stop(Native Method)
09-06 22:59:52.460: W/System.err(1069):     at de.spyapp.VoiceRecorder.stopRecording(VoiceRecorder.java:33)
09-06 22:59:52.460: W/System.err(1069):     at de.spyapp.CheckCMD.checkCMD(CheckCMD.java:30)
09-06 22:59:52.460: W/System.err(1069):     at de.spyapp.AppActivity$2.run(AppActivity.java:44)
09-06 22:59:52.460: W/System.err(1069):     at java.lang.Thread.run(Thread.java:1096)
EN

回答 2

Stack Overflow用户

发布于 2012-09-06 21:23:27

问题不在于停止,而在于启动。它不能正确启动,这就是为什么你不能稍后停止它的原因。

检查几件事: a)您添加了persmission android.permission.RECORD_AUDIO

b)您写入SD卡(我不确定这是必需的,但我相信我在写入内部存储器时遇到问题)。您需要权限才能写入SD卡。

c)另外,尝试设置onErrorListener http://developer.android.com/reference/android/media/MediaPlayer.html#setOnErrorListener(android.media.MediaPlayer.OnErrorListener

d)在我建议阅读这篇文章之前,尝试在任何其他调用之前重置() MediaPlayer,http://developer.android.com/reference/android/media/MediaPlayer.html#Valid_and_Invalid_States安卓的MediaRecorder状态是噩梦。

票数 5
EN

Stack Overflow用户

发布于 2012-09-06 21:15:19

当您从无效状态调用stop()时,似乎抛出了这个错误。

记录器的活动周期似乎还表明您需要准备()它,然后才能开始记录-您正在这样做吗?除非记录器至少已准备好,否则stop()不是有效命令。

如果是这样,可能需要一段时间让记录器真正处于有效状态,然后才能调用stop()。您将在start()之后立即调用它,因此可能发生了一些事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12308365

复制
相关文章
Python抛出异常_python抛出异常的作用
在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误
全栈程序员站长
2022/11/02
2.5K0
【C++ 语言】异常 ( 抛出字符串异常 | 抛出异常对象 | 抛出任意对象 | 抛出自定义异常 )
1. 异常处理 : 使用 " try{}catch(){} " 将抛出异常的代码包起来 , 注意将可能抛出异常的代码包裹在 try 后的大括号中 , 将异常处理逻辑放在 catch 后的大括号中 ;
韩曙亮
2023/03/27
1.3K0
非法的状态异常:java.lang.IllegalStateException commit already called
之所以报该错误,是因为 Fragment 事务是全局的变量,只能commit一次。
程序员飞飞
2022/05/09
4880
非法的状态异常:java.lang.IllegalStateException commit already called
关于安卓开发实现双状态按钮
双状态按钮(Toggle) xml文件代码 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http
听着music睡
2018/05/18
7660
android 抛出FileNotFoundException异常
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/17
1.6K0
.net remoting 抛出异常
所有在远程软件运行的类,如果需要传输到本地,都需要继承 MarshalByRefObject 或其他可以序列化的类。
林德熙
2018/09/19
1.5K0
.net remoting 抛出异常
dotnet remoting 抛出异常
所有在远程软件运行的类,如果需要传输到本地,都需要继承 MarshalByRefObject 或其他可以序列化的类。
林德熙
2019/09/27
1.4K0
dotnet remoting 抛出异常
python抛出异常和捕获异常_在try块中可以抛出异常吗
2.解析 关键字try 以及except是 使用Python 解释器主动抛出异常的关键, Python解释器从上向下执行 当运行try中的某行代码出错,会直接进入except中执行下方代码 try中错行下方的代码不会被运行 except…as… 是固定的语法格式 打印traceback信息 finally 后的代码不管是否抛出异常都会执行 except 的原理 调用sys中 exc.info 方法返回基本信息 所以抛出异常的第一步拓展可以在这里开始 注意 每个关键字下方的代码都是独立的(所有的变量都是局部变量)
全栈程序员站长
2022/11/02
4.5K0
python抛出异常会终止程序吗_catch里面抛出异常
如果没有 try 和 except 语句覆盖抛出异常的 raise 语句,该程序就会崩溃,并显示异常的出错信息。通常是调用该函数的代码知道如何处理异常,而不是该函数本身。所以你常常会看到 raise 语句在一个函数中,try 和 except 语句在调用该函数的代码中。
全栈程序员站长
2022/11/19
2.2K0
dotnet remoting 抛出异常
所有在远程软件运行的类,如果需要传输到本地,都需要继承 MarshalByRefObject 或其他可以序列化的类。
林德熙
2022/08/04
1K0
python抛出异常和捕获异常_Python异常
class Widget: def __init__(self,size=(40,40)): self._size=size def getSize(self): return self._size def resize(self,width,height): if width<0 or height<0:
全栈程序员站长
2022/11/02
2.9K0
应该抛出什么异常?不应该抛出什么异常?(.NET/C#)
2018-02-04 13:25
walterlv
2018/09/18
1.7K0
c++构造函数是否可以抛出异常_什么叫抛出异常
从语法上来说,构造函数可以抛出异常。但从逻辑上和风险控制上,构造函数中尽量不要抛出异常。万不得已,一定要注意防止内存泄露。
全栈程序员站长
2022/09/22
1.7K1
python抛出异常会终止程序吗_python抛出异常的作用
当python执行无效的代码时,就会抛出异常。用 try 和 catch 语句可以处理异常,以避免程序的崩溃。我们也可以在代码中抛出自己的异常,抛出异常意味着 停止运行这个函数中的代码,将程序执行转到except语句
全栈程序员站长
2022/11/02
1.8K0
Java 捕获和抛出异常
Java中把非正常情况分为两种:异常(Exception)和错误(Error),其中Error错误一般是指与虚拟机相关的问题,这种错误无法恢复或不可能捕获,而对于Exception异常我们可以使用try…catch进行捕获。try…catch不允许存在单独的try块或catch块,可存在多个catch块。try块中存放业务功能代码,catch块中存放异常处理代码。Java7后支持用catch捕获多个异常,也可捕获自定义异常。对于捕获的异常一般可以使用printStackTrace()方法追踪输出至标准错误流。try…catch后可以添加finally,使用finally可以保证除系统退出外finally块中代码绝对执行。捕获异常时需要注意一定要先捕获小异常,再捕获大异常,否则小异常将无法被捕获。代码示例如下
用户7886150
2021/04/06
1.9K0
django 主动抛出 403 异常
* 网站名称:obaby@mars * 网址:https://h4ck.org.cn/ * 本文标题: 《django 主动抛出 403 异常》 * 本文链接:https://h4ck.org.cn/2018/12/django-%e4%b8%bb%e5%8a%a8%e6%8a%9b%e5%87%ba-403-%e5%bc%82%e5%b8%b8/ * 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。
obaby
2023/02/24
7540
安卓 toast_安卓toast使用
一个 toast 是在屏幕上弹出一条信息,它的大小总是包裹着需要显示的内容,并且当前的 Activity 依然是可见并且可互动的。toast会自动消失,并且不接受任何互动事件。因为 toast 可以在后台的 Service 中创建,所以即使这个应用程序没有显示在屏幕上,仍然可以弹出 toast.
全栈程序员站长
2022/10/01
6.5K0
如何从电脑直接控制安卓手机 监控安卓手机 安卓手机如何控制安卓手机
实用方法很简单,在手机上安装这个软件,然后运行,然后进入Setting,点击User's settings,然后Create new user(我新建了一个叫做ACE的用户),注意这里在豌豆荚的截图只是做教程用的,实际不需要连接豌豆荚,甚至不需要WIFI,只要你打开了GPRS
程序员小顾
2021/12/01
16.6K0
python中用来抛出异常的关键字是( )_python异常抛出
动抛出异常raise typeerror(类型错误) # 7. 触发异常try: raise typeerror(类型错误)except exception as e: print(e) # 8. 自定义异常class my…syntaxerror 语法错误 python代码非法,代码不能编译(个人认为这是语法错误,写错了) typeerror 类型错误传入对象类型与要求的不符合 unboundlocalerror …
全栈程序员站长
2022/11/02
1K0
『安卓』安卓开发基础--基本控件
显示文字,相当于Panel。一般用来文本展示,继承自android.view.View,在android.widget包中。
风骨散人Chiam
2020/10/28
7K0

相似问题

安卓MediaRecorder正在抛出IllegalStateException

20

安卓Location.convert抛出非法参数异常

20

MediaPlayer抛出非法状态异常

11

媒体播放器isPlaying抛出非法状态安卓

12

安卓MediaRecorder(3089):启动失败:-38异常

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文