单击按钮进行录音



我正在开发一个使用录音功能的 Android 应用程序,为此我正在点击按钮进行录音,就像用户按住按钮超过 3 秒一样,它将允许录音。

为此,我使用的是触摸侦听器,但问题是,如果用户只是单击按钮而不保持它,那么就会调用录音或函数。我的代码如下:

mBtnSendAudio.setOnTouchListener(new OnTouchListener() {
            boolean shouldRecord = true;
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(!canChat) {
                    Toast.makeText(getBaseContext(), "Turned Off Chat", Toast.LENGTH_SHORT).show();
                    return true;
                }
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    mLastDown = System.currentTimeMillis();
                    shouldRecord = true;
                    startRecording();
                    mLLAudioRecordingHover.setVisibility(View.VISIBLE);
                    rectAudioButton = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
                    mStartTime = System.currentTimeMillis();
                    mRecordHandler.removeCallbacks(mUpdateTimeTask);
                    mRecordHandler.postDelayed(mUpdateTimeTask, 100);
                } else if (event.getAction() == MotionEvent.ACTION_UP) {
                    if (shouldRecord) {
                        mLLAudioRecordingHover.setVisibility(View.GONE);
                        mLastDuration = System.currentTimeMillis() - mLastDown;
                        mRecordHandler.removeCallbacks(mUpdateTimeTask);
                        mLLAudioRecordingHover.setVisibility(View.GONE);
                        stopRecording(true, mLastDuration);
                    }
                }
                if (event.getAction() == MotionEvent.ACTION_MOVE) {
                    // finger move outside of button's bounds
                    if (!rectAudioButton.contains(v.getLeft() + (int) event.getX(), v.getTop()+ (int) event.getY()) && shouldRecord) {
                        mRecordHandler.removeCallbacks(mUpdateTimeTask);
                        shouldRecord = false;
                        stopRecording(shouldRecord, 0);
                        mLLAudioRecordingHover.setVisibility(View.GONE);
                    }
                }
                return v.onTouchEvent(event);
            }
        });

一次尝试如下

mBtnSendAudio.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View arg0, MotionEvent arg1) {
        switch (arg1.getAction()) {
        case MotionEvent.ACTION_DOWN:
            mRecordHandler.postDelayed(run, 3500/* OR the amount of time you want */);
            break;
        default:
            mRecordHandler.removeCallbacks(run);
            break;
        }
        return true;
    }
});

这是可以更改录制状态的

Runnable run = new Runnable() {
@Override
public void run() {
     shouldRecord = true;
}

};

更新:

然后你必须使用手势检测器,如下所示

private GestureDetector gestureDetector = new GestureDetector(this, new SimpleOnGestureListener {
    @Override
    public boolean onSingleTapConfirmed(MotionEvent event) {
        return true;
    }
});

然后在 OnTouchListener 的 onTouch(-,-) 中

 if (gestureDetector.onTouchEvent(arg1)) {
                // single tap
              //write your code for single click
                return true;
     } 

希望它能帮助你。

您在这里有两个选择:首先,您可以忘记3秒并使用View.OnLongClickListener,这是大多数开发人员用来检测按住事件的标准侦听器,或者您可以在if (event.getAction() == MotionEvent.ACTION_DOWN) {}条件中设置计时器,这是3秒计时器的代码:

new CountDownTimer(3000, 1000) {
                    public void onTick(long millisUntilFinished) {

                    }
                    public void onFinish() {
                        //your caode
                    }
                }.start();

在方法中使用所需的功能onFinish()

最新更新