【问题标题】:How to know whether a MediaRecorder is in running state or not?如何知道 MediaRecorder 是否处于运行状态?
【发布时间】:2011-03-28 09:11:17
【问题描述】:

我编写了一个代码来使用 MediaRecorder 录制通话对话的音频。

我如何知道 MediaRecorder 是否处于运行状态,以停止录制。 喜欢

boolean running;
MediaRecorder mr;
//what should i assign to running?        
if(running){
   mr.stop()
}

上面的代码只是一个例子..如果你不明白我的问题,请告诉我..我会用实际的代码解释清楚..

我只想知道“MediaRecorder 处于哪个状态?” -> 录制/发布/准备/初始/等..

【问题讨论】:

  • 尽管这个问题已经有十年了,但问题仍然存在,即无法确定MediaRecorder 是否已开始录制。但是,我只是在这里发布了一个解决方法:stackoverflow.com/a/66821059/15389960 在此处发布链接,因为我在研究问题时发现了这个问题,并且接受的解决方案让我折腾了,因为它是针对 MediaPlayer 而不是针对 MediaRecorder .问候。

标签: android audio-recording mediarecorder


【解决方案1】:
   String flag = "0";


         public void audioRecordStart(){
            if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
               try {
                    if (flag.equals("1")){
                       // It means recorder is already on recording state.
                    }
                    else{
                       myAudioRecorder.prepare();
                       myAudioRecorder.start();
                       flag = "1";
                    }
                } catch (IllegalStateException ise) {
                    // make something ...
                } catch (IOException ioe) {
                    // make something
                }
                Toast.makeText(getApplicationContext(), "Recording started", Toast.LENGTH_LONG).show();
            }
            else {
                getAudioPermission();
            }
        }

        public void audioRecordStop() {
            if (flag.equals("0")){
               // It means recorder is already stopped state.
            }
            else {
                myAudioRecorder.stop();
                myAudioRecorder.release();
                myAudioRecorder = null;
                flag = "0";
                Toast.makeText(getApplicationContext(), "Audio Recorder successfully", Toast.LENGTH_LONG).show();
            }
        }

【讨论】:

  • 请在您的答案中添加一些解释,以便其他人可以从中学习
  • 没有这样的方法可以知道 MediaRecorder 的状态。我只是举了一个例子,你如何使用创建你自己的方法来检查状态,比如 (flag==1)
【解决方案2】:

您无法直接获取状态,请参阅http://code.google.com/p/android/issues/detail?id=800的开放增强请求

当媒体播放器达到某个状态时,您需要在监听器中手动设置一个变量,以便记住当前状态。

还有这个讨论: http://www.mail-archive.com/android-developers@googlegroups.com/msg35320.html

【讨论】:

  • 此增强请求是针对 MediaPlayer 而不是 MediaRecorder
  • Android 再次处于 最佳状态 ?
  • 所以基本上你甚至不能手动实现精确的录制状态,例如:设置录制会话的最大持续时间(以毫秒为单位)。在 setOutFormat() 之后但在 prepare() 之前调用它。录制达到指定的持续时间后,将向 MediaRecorder.OnInfoListener 发送通知,其中包含 MEDIA_RECORDER_INFO_MAX_DURATION_REACHED 的“what”代码并停止录制。停止是异步发生的,不能保证在通知侦听器时记录器已经停止..
  • 您说“当媒体播放器达到某个状态时,在侦听器中手动设置一个变量”。你说的“听众”是什么意思? MediaRecorder 触发很少的事件,即信息侦听器、错误侦听器和路由更改侦听。听哪一个知道它达到了目标状态?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 2011-06-12
相关资源
最近更新 更多