如何设置最大持续时间记录,释放文件并使用媒体记录器自动开始记录

时间:2019-06-17 21:03:43

标签: android audio mediarecorder

我的应用程序具有一项功能,该功能使用通过服务(IntentService)启动的Media Recorder记录音频,从而将其记录在后台。

由于某些设备和API限制,我需要对文件实施限制,以便一旦达到配置的限制,就生成文件并重新开始录制。

例如,到达1分钟后,您必须停止记录,生成文件并开始另一次记录,直到服务停止为止。

我尝试使用setOnInfoListener,但从未调用此事件,当我将maxDuration定义为一分钟时,在此持续时间之后,logcat显示此消息并停止音频记录:

处理程序(android.media.MediaRecorder $ EventHandler){ee2b629}在死线程上向处理程序发送消息     java.lang.IllegalStateException:处理程序(android.media.MediaRecorder $ EventHandler){ee2b629}在死线程上向处理程序发送消息         在android.os.MessageQueue.enqueueMessage(MessageQueue.java:545)         在android.os.Handler.enqueueMessage(Handler.java:661)         在android.os.Handler.sendMessageAtTime(Handler.java:630)         在android.os.Handler.sendMessageDelayed(Handler.java:600)         在android.os.Handler.sendMessage(Handler.java:537)         在android.media.MediaRecorder.postEventFromNative(MediaRecorder.java:1709)

        mediaRecorder = new MediaRecorder();
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        mediaRecorder.setOutputFile(file.getPath());
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        mediaRecorder.setMaxDuration(60000); 
        mediaRecorder.prepare();
        mediaRecorder.start();

        mediaRecorder.setOnInfoListener((mr, what, extra) -> {
            if(what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED){
               //Do somethings
            }
        });

1 个答案:

答案 0 :(得分:0)

启动一个计时器,该计时器将在给定的时间后触发,例如您希望录制最长为20分钟,然后在调用mediaRecorder.start()时启动计时器,并在20分钟后调用stop触发()和release()方法。如果您觉得录制完成,甚至可以取消