我有这个有效的代码。我需要它只在有限的时间内录制,而无需用户点击任何内容。我该怎么做?
MediaRecorder recorder = new MediaRecorder();
File outputFile = new File(file);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(outputFile.getAbsolutePath());
try {
recorder.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
recorder.start();
recorder.setMaxDuration(60000);
// stop
recorder.stop();
recorder.reset();
recorder.release();
答案 0 :(得分:4)
这样做会很好:(在prepare / start函数之前使用setMaxDuration)
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(outputFile.getAbsolutePath());
recorder.setMaxDuration(60000);
recorder.prepare();
recorder.start();
答案 1 :(得分:2)
使用setMaxDuration
和setOnInfoListener
获取用于通知用户界面的回调。
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(outputFile.getAbsolutePath());
recorder.setMaxDuration(60000);
recorder.prepare();
recorder.setOnInfoListener(new MediaRecorder.OnInfoListener() {
@Override
public void onInfo(MediaRecorder mr, int what, int extra) {
if(what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED){
Toast.makeText(context, "Recording stops. Limit reached", Toast.LENGTH_LONG).show();
}
}
});
recorder.start();
答案 2 :(得分:1)
这可能不是一个令人讨厌的方法。但这就是我所做的,
使用mediaplayer.start()启动mediaPlayer后,启动与此并行的Thread,
thread passMusic=new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(60000);
mediaplayer.pause();
mediaplayer.stop();
mediaplayer.release();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});passMusic.start();
现在您可以使用处理程序更新您的UI或其他内容。
答案 3 :(得分:0)
你应该将你的recorder.stop()等调用放入计时器
以下是有关如何使用计时器任务http://developer.android.com/resources/articles/timed-ui-updates.html
的说明的链接Timer timer = new Timer();
timer.schedule(new FinishRecordingTask(), 100, 200);
只需在调用recorder.start()
后添加此项