Android:2个任务一个接一个地有时差

时间:2015-08-13 14:18:56

标签: android android-audiorecord

我正在使用AudioRecord。

要求是我必须产生一个音调并播放音调0.25秒。之后,录音应自动开始并持续10秒钟。 10秒后,应停止录音。

我编写了代码来生成音调并录制和播放音频。

但是我无法按照所需的时间对其进行排序。由于RecordThread:overflow或java.lang.RuntimeException,我面临线程问题:无法在未调用Looper.prepare()的线程内创建处理程序。

genTone(Constants.HEART_TONE_FREQ);
playToneInPhone();

Thread recordThread = new Thread(new Runnable() {
    @Override
    public void run() {
        isRecording=true;
        recordingTimer = new RecordingTimer(10000,1000);
        recordingTimer.start();
        startRecording();
    }
});
try {
    recordThread.sleep(250);
    recordThread.start();
} catch(InterruptedException ie) {

}

RecordingTimer是一个CountDownTimer。有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

为什么不使用带有Handler功能的postDelayed来实现此目的。它将在主UI线程上运行,因此将强制进行同步。

我可以提供一些示例实现,如果这会有帮助吗? :)

答案 1 :(得分:0)

我在线程启动后通过puttin recordingTimer修复了上述问题。如果还有其他更好的方法,请告诉我。

genTone(Constants.HEART_TONE_FREQ);
    playToneInPhone();

    Thread recordThread = new Thread(new Runnable() {
        @Override
        public void run() {
            isRecording=true;

            startRecording();
        }
    });
    try {
        recordThread.sleep(250);
        recordThread.start();
        recordingTimer = new RecordingTimer(10000,1000);
        recordingTimer.start();
    } catch(InterruptedException ie) {

    }

答案 2 :(得分:0)

应该使用ScheduledExecutorSrvice(使用延迟或调度的流)或Future Interface,在流式传输完成后检索对象(将收到结果数据)。它是通过流对象而不是Runnable接口

发送的