Android停止录音失败

2024-01-06

我将启动一项服务来开始录音。当我试图停止时,它显示以下消息

06-27 17:21:30.138: E/MediaRecorder(6122): stop called in an invalid state: 0

我不确定其他功能(例如上传数据到服务器)是否会影响结果(在Asyck Task中未实现,仅调用方法)

如果我没有捕获运行时异常,有时可能会显示处理程序异常(正在完成活动,停止记录)

06-27 17:32:35.988: W/System.err(6818): java.lang.IllegalStateException
06-27 17:32:35.988: W/System.err(6818):     at android.media.MediaRecorder.stop(Native Method)
06-27 17:32:35.988: W/System.err(6818):     at tvbpv.test.EOrderSystem1.RecordService.stopRecording(RecordService.java:109)
06-27 17:32:35.988: W/System.err(6818):     at tvbpv.test.EOrderSystem1.RecordService.onDestroy(RecordService.java:46)
06-27 17:32:35.988: W/System.err(6818):     at android.app.ActivityThread.handleStopService(ActivityThread.java:2401)
06-27 17:32:35.988: W/System.err(6818):     at android.app.ActivityThread.access$2000(ActivityThread.java:127)
06-27 17:32:35.988: W/System.err(6818):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1225)
06-27 17:32:35.988: W/System.err(6818):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-27 17:32:35.988: W/System.err(6818):     at android.os.Looper.loop(Looper.java:137)
06-27 17:32:35.988: W/System.err(6818):     at android.app.ActivityThread.main(ActivityThread.java:4519)
06-27 17:32:35.988: W/System.err(6818):     at java.lang.reflect.Method.invokeNative(Native Method)
06-27 17:32:35.988: W/System.err(6818):     at java.lang.reflect.Method.invoke(Method.java:511)
06-27 17:32:35.988: W/System.err(6818):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
06-27 17:32:35.988: W/System.err(6818):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:561)
06-27 17:32:35.988: W/System.err(6818):     at dalvik.system.NativeStart.main(Native Method)

开始录音

06-28 09:14:47.646: E/MediaRecorder(3089): start failed: -38
06-28 09:14:47.646: W/System.err(3089): java.lang.IllegalStateException
06-28 09:14:47.646: W/System.err(3089):     at android.media.MediaRecorder.start(Native Method)
06-28 09:14:47.646: W/System.err(3089):     at tvbpv.test.EOrderSystem1.RecordService.startRecording(RecordService.java:87)
06-28 09:14:47.646: W/System.err(3089):     at tvbpv.test.EOrderSystem1.RecordService.onStart(RecordService.java:49)
06-28 09:14:47.646: W/System.err(3089):     at android.app.Service.onStartCommand(Service.java:438)
06-28 09:14:47.646: W/System.err(3089):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2371)
06-28 09:14:47.646: W/System.err(3089):     at android.app.ActivityThread.access$1900(ActivityThread.java:127)
06-28 09:14:47.646: W/System.err(3089):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1222)
06-28 09:14:47.646: W/System.err(3089):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-28 09:14:47.646: W/System.err(3089):     at android.os.Looper.loop(Looper.java:137)
06-28 09:14:47.646: W/System.err(3089):     at android.app.ActivityThread.main(ActivityThread.java:4519)
06-28 09:14:47.646: W/System.err(3089):     at java.lang.reflect.Method.invokeNative(Native Method)
06-28 09:14:47.646: W/System.err(3089):     at java.lang.reflect.Method.invoke(Method.java:511)
06-28 09:14:47.646: W/System.err(3089):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
06-28 09:14:47.646: W/System.err(3089):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:561)
06-28 09:14:47.646: W/System.err(3089):     at dalvik.system.NativeStart.main(Native Method)

下面是我的代码

RecordService.java


private MediaRecorder recorder;
private File instanceRecord;
private boolean recording= false;
@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}



@Override
public void onStart(Intent intent, int startId) {
    startRecording();       
    super.onStart(intent, startId);
}



@Override
public void onDestroy() {
    stopRecording();
    super.onDestroy();
}

private void prepareRecording()
{
    try
    {
        recorder.prepare();
    }
    catch(IllegalStateException e)
    {
        e.printStackTrace();

    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    }
}

public  void startRecording(){

    try {

    recorder = new MediaRecorder();
    recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

    Date today = Calendar.getInstance().getTime();    
    Format formatter = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
    String reportDate = formatter.format(today);


    File instanceRecordDirectory = new File(Environment.getExternalStorageDirectory() + File.separator + "TVB_PV_recordings");

    if(!instanceRecordDirectory.exists()){
        instanceRecordDirectory.mkdirs();
    }

    instanceRecord = new File(instanceRecordDirectory.getAbsolutePath() + File.separator + reportDate + "_sales_recording.mp4");
    if(!instanceRecord.exists()){
        instanceRecord.createNewFile();
    }

    recorder.setOutputFile(instanceRecord.getAbsolutePath());        
    prepareRecording();
    recorder.start();
    recording = true;

    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }catch (Exception e){
        e.printStackTrace();
    }
}

public  void stopRecording() {
    if (recorder != null) {       
          try {
            recorder.stop();
          } catch(RuntimeException e) {
              instanceRecord.delete();  //you must delete the outputfile when the recorder stop failed.
          } finally {
            recorder.release();
            recorder = null;
          }
    }                   
}


Other Activity: 

        stopService(new Intent(EOrderSystemSubmit.this, RecordService.class));      

http://developer.android.com/reference/android/media/MediaRecorder.html http://developer.android.com/reference/android/media/MediaRecorder.html- 非常仔细地查看主题开头的图表。我确信,您在录音未开始时正在调用停止。

停止录音。在 start() 之后调用它。一旦停止录制,您将必须重新配置它,就好像它刚刚构建一样。请注意,RuntimeException 是 如果调用 stop() 时未收到有效的音频/视频数据,则有意向应用程序抛出该异常。如果在 start() 之后立即调用 stop(),就会发生这种情况。该故障允许应用程序采取相应的操作来清理输出文件(例如,删除输出文件),因为发生这种情况时输出文件未正确构造。

投掷 如果在 start() 之前调用则出现 IllegalStateException

这就是文档所说的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android停止录音失败 的相关文章

随机推荐

  • 如何覆盖 Grails GORM 中关系的级联删除?

    我在使用 Grails 的 GORM 部分时遇到一些问题 我正在使用 Grails 1 3 4 和 H2 在数据库中我有两个表template and report 在 GORM 级别我有两个 Domain 类Template and Re
  • Blazor 路由中的多个查询字符串参数

    我当前的项目中有多个从 url 检索 1 个查询参数的工作示例 但是当尝试对多个 url 参数遵循相同的约定时 我在 chrome 调试器控制台中收到以下错误 Error System InvalidOperationException R
  • 如何将 IdentityServer4 Identity 映射到任何 WebApp(.Net MVC Boilerplate、.Net Core Boilerplate)

    我正在创建一个 SSO 服务器 将所有用户集中在 Active Directory AD 中并在那里管理它们 而不是管理每个特定应用程序的数据库 为了制作这个服务器 我使用了 IdentityServer4 Idsr4 和LDAP AD 扩
  • 尝试使用需要身份验证的 API 的 Google 脚本从 TDAmeritrade 提取股票报价信息

    我正在使用 TD Ameritrade 的 API 来提取股票行情信息 该脚本需要身份验证才能提取实时数据 CURL命令如下 curl X GET header 授权 header 授权 承载 https api tdameritrade
  • 滚动视图中的 SwiftUI 动画/过渡表现得很奇怪

    我在 SwiftUI 中有一个包含多个元素的 ScrollView 其中一些元素可以点击扩展 struct ExpandingView View State var showContent false var body some View
  • 从字符串中删除完全匹配的单词

    我想删除下面句子中的 amp 一词 original x lt come on amp this just encourages the already rampant mispronunciation of phuket 我想要的是 x
  • React Javascript 显示/解码 unicode 字符

    我有一个需要转换的 unicode 字符串 我需要将带有 u00f3 的字符串渲染为 这是一个示例 所有其他类型的字符都应该发生这种情况 我有以下基本代码 https jsfiddle net dddf7o70 https jsfiddle
  • 对于 asp.net mvc 中的身份验证非常非常困惑

    我得出的结论是我需要放弃 ASP NETMembership 列出原因 现在我发现我唯一需要的就是创建一个cookie 由Form Authentication 用于身份验证的自定义方法 完成 最后根据是否登录或按角色进行验证 我被困在最后
  • 根据客户端请求使用 Node 运行 Bash 脚本

    当浏览器中的用户单击按钮时 我需要运行服务器端脚本 我研究了一段时间 没搞明白 我们有什么 在 Fedora Red Hat 上运行的 Node js 服务器 在本地主机上 NO PHP 大多数页面都是 html javascript jQ
  • 通过线程下载图像错误

    祝所有 StackOverFlow 会员和读者新年快乐 我今天来找你询问有关 Delphi 中线程的问题 我浏览了大部分已经发布的关于该主题的内容 但找不到线索 我有一个非常简单的测试应用程序 其中包含一个表单 frmIMGDown 和一个
  • 如何将 OPENID auth 集成到 REST api 和前端框架架构中

    我目前正在制作一个需要用户登录的网站Steam http steamcommunity com 在他们可以使用我网站的其余功能之前 Steam 目前仅支持 OPENID 进行身份验证 我的做法是按照以下步骤进行 用户按下 使用 Steam
  • python:分割字符串,用管道符号“|”分隔

    看一下下面的字符串 E 1256280 2014 01 05 17 54 00 1 2014 01 05 18 59 53 True 我想把它分开 管道符号 因此我使用以下 python 代码 其中 line 是包含上面描述的字符串的字符串
  • 在 WP7 中打开具有特定 url 的网络浏览器

    我将如何通过单击按钮时的特定网址打开网络浏览器 将以下代码放入按钮 Click 事件处理程序中 var task new Microsoft Phone Tasks WebBrowserTask URL uri task Show
  • 以编程方式添加带有按钮的视图

    我想以编程方式添加一个视图和一个按钮 如下所示 问题是单击按钮时按钮没有反应 我的意思是它既不会突出显示也不会调用选择器 原因是我想为录音 声音文件 实现一个列表行 列表行应该可以选择进行向下钻取 并有一个播放按钮 所以我得到了一个Reco
  • 将给定行移动到 DataFrame 的末尾

    我想从 DataFrame 中获取给定的行并将其添加到相同的 DataFrame 中 我下面的代码就是这样做的 但我不确定我是否以正确的方式这样做 或者是否有更简单 更好 更快的方法 testdf df copy get row targe
  • Jetpack Compose 中具有等高行的网格布局

    喷气背包组成 我想创建一个像 UI 一样具有相同高度行的网格布局 但我找不到用于获取当前可用屏幕尺寸的函数 该应用程序应该看起来像这样 https i stack imgur com TTMQb png 结果应该是这样的 看看上面提到的链接
  • 在 Kotlin 中维护重复值的两个列表的交集

    我想找到两个列表之间公共元素的数量而不消除重复项 例如 input 1 3 3 4 3 3 output 2 因为共同元素是 3 3 input 1 2 3 4 3 3 output 1 因为共同元素是 3 如果我要使用 Kotlin 集合
  • 为什么 psycopg2 和 pyodbc 连接数据库的方式不同?我该如何翻译连接?

    所以我一直在努力寻找一个好的模块来查询我公司的 POSTGRES 数据库中的信息 周围有很多模块 但我似乎只能让 pyodbc 工作 为什么 pyodbc 的连接形式与 psycopg2 不同 后者似乎是更高级的模块 我如何将连接查询从一种
  • 数组索引超出范围的二维数组

    我有一个二维数组 但没有 行数为 1 并且没有 列数 gt 1 double T new double 1 24 System out println T 1 length 但是当我打印列的长度时 它说索引超出范围 但是当我打印以下内容时
  • Android停止录音失败

    我将启动一项服务来开始录音 当我试图停止时 它显示以下消息 06 27 17 21 30 138 E MediaRecorder 6122 stop called in an invalid state 0 我不确定其他功能 例如上传数据到