Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置android中音频录制的时间限制_Android_Multithreading_Button_Touch - Fatal编程技术网

设置android中音频录制的时间限制

设置android中音频录制的时间限制,android,multithreading,button,touch,Android,Multithreading,Button,Touch,我创建了一个按钮,当触摸时开始录音,当不触摸时停止录音。我应该实现这样的线程吗?但我到底应该把它放在哪里,在行动中。向下还是行动中。向上 public class StopRecord extends Thread { int i = 0; @Override public void run() { super.run(); handler.post(new Runnable() { @Override public void run() {

我创建了一个按钮,当触摸时开始录音,当不触摸时停止录音。我应该实现这样的线程吗?但我到底应该把它放在哪里,在行动中。向下还是行动中。向上

public class StopRecord extends Thread {
int i = 0;
@Override
public void run() {
    super.run();
    handler.post(new Runnable() {
        @Override
        public void run() {
            stopRecording();
        }
    });
}
}

我必须把它放在这里:

@Override
        public boolean onTouch(View v, MotionEvent event) {
            switch(event.getAction()){
                case MotionEvent.ACTION_DOWN:
                    startRecording();
                break;
                case MotionEvent.ACTION_UP:
                    stopRecording();
                break;
            }
            return false;
        }
    });

创建一个按钮更有意义。当您按下该按钮时,录制开始,按钮更改(文本,可能是背景色)以告知用户正在录制。他再按一下,它就停了。您可以使用handler.postDelayed(runnable,delayMs)进行超时。但是,如果用户在超时之前按下停止按钮,则应取消处理程序。您可以通过handler.removeCallbacks(runnable)

执行此操作。我没有示例代码,但我建议查看《开发人员指南》,该指南提供了一个很好的示例,请检查以下内容:

对于超时部分,请检查以下内容:


希望这能对您有所帮助。

因此,我还做了以下工作:

private MediaRecorder.OnInfoListener infoListener = new MediaRecorder.OnInfoListener()
{
    @Override
    public void onInfo(MediaRecorder mr, int what, int extra) {

        if (what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED) {
            //display in long period of time
            Toast.makeText(getApplicationContext(), "End Recording", Toast.LENGTH_LONG).show();
            stopRecording();

        }

    }
};

我猜您正在尝试使用startRecording()并停止工作线程上的录制。但是您使用的处理程序没有在工作线程中定义。因此,这些方法仍将在主线程上运行。。有没有因为我困惑而完整的例子?private MediaRecorder.oninfostener infoListener=new MediaRecorder.oninfostener(){@Override public void onInfo(MediaRecorder mr,int what,int extra){if(MEDIA_RECORDER_INFO_MAX_DURATION_reated_>A值){stoprecording};这就是你的意思?检查一下:,int,int)。一旦达到指定的超时时间,它可以用来停止录制。