0

我试图让录音功能在这么多秒后停止。录音有效,但在给定的持续时间后不会停止。

我已经尝试将这些项目放在我的 onClick 以及被调用函数的 try 部分中,但每次我得到相同的结果时,应用程序都会继续运行。

环顾 stackoverflow 和其他站点,我在线程、处理程序 postDelayed 和计时器上尝试了不同的想法,但没有任何接缝可以工作。

我已经从下面的代码中删除了录音内容,只关注持续时间设置。代码在我尝试的最后一项。

我感谢任何帮助。

public void onClick(View v) {
    recordStarted=true;
    recordAudio();
    final Runnable stopRecording = new Runnable() {
        public void run() {
            recordStarted=false;
        }
    };
    handler.postDelayed(stopRecording, 3000);

    //Start the delay of stopping the recordin

}

public void recordAudio () {
    try {

        while(recordStarted) {
            counter++;
    } catch (Throwable t) {
        Log.e("AudioRecord", "Recording Failed");
        t.printStackTrace();
    }
    String counterS = String.valueOf(counter);
    Toast.makeText(Main.this, "counter = " + counterS, Toast.LENGTH_SHORT).show();
}
4

1 回答 1

0

您的问题似乎是针对 Java VM 中的变量访问优化。您必须将 recordStarted 变量声明为 volatile:

    private volatile boolean recordStarted = false;

或者更好地使用同步上下文:

    private Object sync = new Object();
    .....
    synchronized (sync) {
       recordStarted=false;
    }
    .....
    synchronized (sync) {
       while(recordStarted)
          ...
    }
于 2014-01-17T05:48:57.687 回答