如何自动限制Android录音长度?

时间:2012-02-17 00:44:28

标签: android audio-recording

我有这个有效的代码。我需要它只在有限的时间内录制,而无需用户点击任何内容。我该怎么做?

    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();

4 个答案:

答案 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)

使用setMaxDurationsetOnInfoListener获取用于通知用户界面的回调。

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()

后添加此项