我的应用程序具有一项功能,该功能使用通过服务(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
}
});
答案 0 :(得分:0)
启动一个计时器,该计时器将在给定的时间后触发,例如您希望录制最长为20分钟,然后在调用mediaRecorder.start()时启动计时器,并在20分钟后调用stop触发()和release()方法。如果您觉得录制完成,甚至可以取消