1

在我的应用程序中,当用户按下按钮 MediaRecorder 开始录制音频然后它继续录制 50 秒并自动停止。我从 UI 线程启动录音机,但是如何等待 50 秒而不冻结 UI。这是我的代码:

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.setOutputFile(path);
recorder.prepare();
recorder.start();
Thread.sleep(40000);
recorder.stop();
recorder.reset();
recorder.release();

我对线程不太了解。请帮助

4

1 回答 1

0

对于这样的事情,Android 提供了一些工具,因此您不需要线程。如果您有一个方便的View对象(或者如果此代码在View子类中),您可以使用View.postDelayed(Runnable, long)来安排 aRunnable在特定延迟(以毫秒为单位)后执行。

// need to make recorder final so it can be referenced from anonymous Runnable
final MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.setOutputFile(path);
recorder.prepare();
recorder.start();
postDelayed(new Runnable() {
    @Override
    public void run() {
        recorder.stop();
        recorder.reset();
        recorder.release();
    }
}, 40000);

如果您没有方便的View,只需创建一个Handler并使用它的postDelayed方法。它的工作原理相同。

于 2013-05-31T17:05:51.930 回答