问题描述: 在Android 8.1上使用MediaRecorder的setMaxDuration方法时失败。
解决方法: 在Android 8.0及以上版本的设备上,setMaxDuration方法被视为废弃,因此不能正常工作。解决这个问题的方法是使用新的方法setOnInfoListener来监听录制的时长,并在达到指定时长时停止录制。
下面是一个示例代码:
private MediaRecorder mMediaRecorder;
private boolean mIsRecording = false;
private void startRecording() {
// 初始化MediaRecorder
mMediaRecorder = new MediaRecorder();
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mMediaRecorder.setOutputFile(getOutputFilePath());
// 设置录制的最大时长
// mMediaRecorder.setMaxDuration(60 * 1000); // 这个方法在Android 8.1上会失败
// 设置录制的监听器,用于监听录制的时长
mMediaRecorder.setOnInfoListener(new MediaRecorder.OnInfoListener() {
@Override
public void onInfo(MediaRecorder mr, int what, int extra) {
if (what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED) {
stopRecording();
}
}
});
try {
mMediaRecorder.prepare();
mMediaRecorder.start();
mIsRecording = true;
} catch (IOException e) {
e.printStackTrace();
}
}
private void stopRecording() {
if (mIsRecording) {
mMediaRecorder.stop();
mMediaRecorder.reset();
mMediaRecorder.release();
mMediaRecorder = null;
mIsRecording = false;
}
}
这个示例代码中,我们注释掉了setMaxDuration方法,并使用setOnInfoListener来监听录制的时长。当录制的时长达到指定时长时,会回调onInfo方法,并在其中停止录制。
希望这个解决方法能对您有帮助!