如何在Android应用中应用按钮按下延迟?

时间:2019-05-18 22:33:34

标签: java android

我正在构建一个录音机应用程序,并且我使用了onTouch方法来捕获声音,然后它会自动播放捕获的声音。有两个问题:

首先,如果您立即停止触摸按钮,该应用程序将无法记录您输入的最后几位,因此您必须记录音频,然后等待约2秒钟的静音,然后再移动手指,该应用程序将记录完整的音频减去最后一个静音位。

第二,如果用户点击或触摸触摸按钮,应用程序将崩溃。

通过某种方式增加按钮点击的等待时间(在用户拉出手指后,按钮在指定的几秒钟内保持按下状态),这两个问题都将得到解决。

代码如下:

        mRecordBtn.setOnTouchListener(new View.OnTouchListener(){

            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {

                if ((motionEvent.getAction() == MotionEvent.ACTION_DOWN)) {
                    startRecording();
                    mRecordLabel.setText("Recording...");
                }
                else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
                    stopRecording();
                    mRecordLabel.setText("Recording Stopped...");

                    MediaPlayer soundPlayer = MediaPlayer.create(getApplicationContext(), Uri.parse(fileName));
                    soundPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    soundPlayer = new MediaPlayer();

                       try {
                          soundPlayer.setDataSource(fileName);
                          soundPlayer.prepare();
                        }
                         catch (IOException e){
                             e.printStackTrace();
                          }

                        soundPlayer.start();

                    mRecordLabel.setText("Do it again!");
                }
                return false;
            }
        });

记录方法:

    private void startRecording() {
        recorder = new MediaRecorder();
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        recorder.setOutputFile(fileName);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);

        try {
            recorder.prepare();
        } catch (IOException e) {
            Log.e(LOG_TAG, "prepare() failed");
        }
        recorder.start();
    }

    private void stopRecording() {
        recorder.stop();
        recorder.release();
        recorder = null;
    }

0 个答案:

没有答案