MediaRecorder start failed

ets2008 2012-04-26 11:34:11
使用MediaRecorder录音,正常流程没有问题,如果一个进程录音的时候,另一个进程再录音程序就崩溃了,而且是在start()的时候崩溃的,讨厌java的很多函数没有返回值,如 prepare()、 start()等,我加了异常处理如下:

try {
mRecorder.prepare();//预期准备
Log.i(TAG, "recorder.prepare()" );
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
Log.i(TAG,e.getMessage());
e.printStackTrace();
return false;
} catch (IOException e) {
// TODO Auto-generated catch block
Log.i(TAG,e.getMessage());
e.printStackTrace();
return false;
}
try{
mRecorder.start(); //开始刻录
}catch (IllegalStateException e) {
// TODO Auto-generated catch block
Log.i(TAG,e.getMessage());
e.printStackTrace();
return false;
}

我对java不是很熟,不知道这样使用异常有没有问题? 当一个进程再录音时,另一个进程启动时,我想得到mic的状态,类似于getStatuse() 之类的函数,请问大家有没有好的办法? 谢谢!
出错信息如下:
04-26 02:23:59.241: E/MediaRecorder(3197): start failed: -1
04-26 02:23:59.251: D/AndroidRuntime(3197): Shutting down VM
04-26 02:23:59.251: W/dalvikvm(3197): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
04-26 02:23:59.462: E/AndroidRuntime(3197): FATAL EXCEPTION: main
04-26 02:23:59.462: E/AndroidRuntime(3197): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.provider.Telephony.SMS_RECEIVED (has extras) } in com.TS.SnsReceiver@44ef9be0
04-26 02:23:59.462: E/AndroidRuntime(3197): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:905)
04-26 02:23:59.462: E/AndroidRuntime(3197): at android.os.Handler.handleCallback(Handler.java:587)
04-26 02:23:59.462: E/AndroidRuntime(3197): at android.os.Handler.dispatchMessage(Handler.java:92)
04-26 02:23:59.462: E/AndroidRuntime(3197): at android.os.Looper.loop(Looper.java:123)
04-26 02:23:59.462: E/AndroidRuntime(3197): at android.app.ActivityThread.main(ActivityThread.java:4627)
04-26 02:23:59.462: E/AndroidRuntime(3197): at java.lang.reflect.Method.invokeNative(Native Method)
04-26 02:23:59.462: E/AndroidRuntime(3197): at java.lang.reflect.Method.invoke(Method.java:521)
04-26 02:23:59.462: E/AndroidRuntime(3197): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-26 02:23:59.462: E/AndroidRuntime(3197): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-26 02:23:59.462: E/AndroidRuntime(3197): at dalvik.system.NativeStart.main(Native Method)
04-26 02:23:59.462: E/AndroidRuntime(3197): Caused by: java.lang.RuntimeException: start failed.
04-26 02:23:59.462: E/AndroidRuntime(3197): at android.media.MediaRecorder.start(Native Method)
04-26 02:23:59.462: E/AndroidRuntime(3197): at com.TS.RcdMediaCtrl.StartRecord(RcdMediaCtrl.java:70)
04-26 02:23:59.462: E/AndroidRuntime(3197): at com.TS.SnsReceiver.onReceive(SnsReceiver.java:53)
04-26 02:23:59.462: E/AndroidRuntime(3197): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:892)
...全文
707 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sada09 2013-08-21
  • 打赏
  • 举报
回复
用AudioRecorder录制一段时间看看是否成功来判断。
房回 2012-08-17
  • 打赏
  • 举报
回复
怎么解决的这个问题。。。各位。。
ets2008 2012-05-04
  • 打赏
  • 举报
回复
谢谢大家的帮助,我还是通过自己的程序逻辑控制吧
aBOUNTWINTER 2012-04-28
  • 打赏
  • 举报
回复
好像录音的资源不能被同时使用,用完后还要释放,别的功能模块才能使用。
ets2008 2012-04-28
  • 打赏
  • 举报
回复
camera 不让重复使用,但mic应该可以吧,因为通话录音可以实现。不管能不能重复使用,我是想获取设备状态信息,类似getDeviceStatus()之类的函数,现在还没找到。
foo1st 2012-04-28
  • 打赏
  • 举报
回复
这个说法在Android技术文档中有却确定么?!

public void start ()
Since: API Level 1 Begins capturing and encoding data to the file specified with setOutputFile(). Call this after prepare().

Since API level 13, if applications set a camera via setCamera(Camera), the apps can use the camera after this method call. The apps do not need to lock the camera again. However, if this method fails, the apps should still lock the camera back. The apps should not start another recording session during recording.


[Quote=引用 4 楼 的回复:]
Audiorecoder按理说应该是可以支持多个的。只不过是从audiofliger里把数据多转一份出来,可以做samplerate的转换。audiotrack可以有多个同时向audiofliger送数据的,这种思想在recorder上应该也是逆向可行的。
[/Quote]
ets2008 2012-04-28
  • 打赏
  • 举报
回复
继续等待高手吧
b87936260 2012-04-28
  • 打赏
  • 举报
回复
我也纠结这个问题啊
ets2008 2012-04-26
  • 打赏
  • 举报
回复
好像android不能直接使用共享内存、消息队列等进程通信方式,使用AIDL感觉复杂而没有必要,最好是能获取MIC的状态,录音前能提示“设备正在使用!”, 大家怎么看? 欢迎加入QQ群 48786483 讨论。
ets2008 2012-04-26
  • 打赏
  • 举报
回复
谢谢楼上的回复,我看了MediaRecorder的源码,没有这些选项,而且大部分是调用的native封装,我正在下framework的源码,不知道能不能找到些选项。
coding码场 2012-04-26
  • 打赏
  • 举报
回复
Audiorecoder按理说应该是可以支持多个的。只不过是从audiofliger里把数据多转一份出来,可以做samplerate的转换。audiotrack可以有多个同时向audiofliger送数据的,这种思想在recorder上应该也是逆向可行的。
ets2008 2012-04-26
  • 打赏
  • 举报
回复
up !
ets2008 2012-04-26
  • 打赏
  • 举报
回复
up !

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧