Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何知道MediaRecorder是否处于运行状态?_Android_Audio Recording_Mediarecorder - Fatal编程技术网

Android 如何知道MediaRecorder是否处于运行状态?

Android 如何知道MediaRecorder是否处于运行状态?,android,audio-recording,mediarecorder,Android,Audio Recording,Mediarecorder,我编写了一个代码,用MediaRecorder录制通话音频 如何知道MediaRecorder是否处于运行状态,以停止录制。 像 上面的代码只是一个例子。。如果你不明白我的问题,请告诉我。。我会用实际代码解释清楚 我只想知道“MediaRecorder处于何种状态?”->正在录制/已发布/已准备好/初始状态等。您无法直接获取状态,请参阅 当mediaplayer达到某个状态时,您需要在侦听器中手动设置一个变量,以便记住当前状态 本次讨论还包括: 此增强请求是针对MediaPlayer而不是Med

我编写了一个代码,用MediaRecorder录制通话音频

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

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


我只想知道“MediaRecorder处于何种状态?”->正在录制/已发布/已准备好/初始状态等。

您无法直接获取状态,请参阅

当mediaplayer达到某个状态时,您需要在侦听器中手动设置一个变量,以便记住当前状态

本次讨论还包括:

此增强请求是针对MediaPlayer而不是MediaRecorderAndroid的,因此基本上您甚至无法手动实现精确的录制状态,例如:设置录制会话的最大持续时间(毫秒)。在setOutFormat()之后但在prepare()之前调用此函数。录制达到指定的持续时间后,将向MediaRecorder.onInfo Listener发送通知,其中包含“what”代码的媒体\u RECORDER\u INFO\u MAX\u duration\u已达到,录制将停止。停止是异步发生的,不能保证在通知侦听器时记录器已经停止。您说过“当mediaplayer达到某个状态时,在侦听器中手动设置一个变量”。你说的“听众”是什么意思
MediaRecorder
很少触发事件,即信息侦听器、错误侦听器和路由更改侦听器。听哪一个知道它达到了目标状态?请在你的答案中添加一些解释,以便其他人可以从中学习。没有这样的方法可以知道MediaRecorder的状态。我刚才举了一个例子,你如何使用create your-own方法检查状态,比如(flag==1),即使这个问题已经十年了,问题仍然存在,也就是说,无法确定
MediaRecorder
是否已经开始录制。然而,我只是在这里发布了一个解决方法:在这里发布链接,因为我在研究问题时发现了这个问题,而接受的解决方案让我犹豫了一下,因为它是针对
MediaPlayer
的,而不是针对
MediaRecorder
。当做
boolean running;
MediaRecorder mr;
//what should i assign to running?        
if(running){
   mr.stop()
}
   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();
            }
        }