Android 长按发送语音

正文

之前的文章我有写过如何录制音频,还没看过的朋友可以点这里,是关于Android 录音工具类 MediaRecorder的介绍,我们是通过一个单例的形式来写的,今天我来教大家如何长按按钮发送语音信息,当然,我只是模拟发送,废话不多说,直接开始

新建项目,

我们在xml中放置一个button即可

<Button
    android:id="@+id/chat_send_audio_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="语音"/>

很简单,我们接下来直接给它注册OnTouchListener监听器,可能有的人会说,为什么不设置LongClickListener,这个就要说到Android的事件分发机制了,之后我会出文章专门说事件的分发机制,总之现在知道要给它注册OnTouchListener监听器就行了,这样更方便点

注册事件

SendAudioBtn.setOnTouchListener(new View.OnTouchListener() {
    private long startTime;
    private long endTime;
    private String path;
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        switch (motionEvent.getAction()) {
            case MotionEvent.ACTION_DOWN:
                startTime = System.currentTimeMillis();
                endTime = System.currentTimeMillis();
                break;
            case MotionEvent.ACTION_MOVE:
                endTime = System.currentTimeMillis();
                if (endTime - startTime > 2 * 1000) {
                    path = Environment.getExternalStorageDirectory() + "/" + "jchat_audio.m4a";
                    startRecord(path);
                }
                break;
            case MotionEvent.ACTION_UP:
                if (endTime - startTime > 2 * 1000) {
                    stopRecord();
                    //  这里发送语音消息
                }
                break;
            default:
                break;
        }
        return true;
    }
});

/**
 * 开始录音
 */
private void startRecord(String path) {
    MyMediaRecorder.getInstance().startRecord(path);
}
/**
 * 结束录音
 */
private void stopRecord() {
    MyMediaRecorder.getInstance().stopRecord();
}

这里的MyMediaRecorder类在之前的文章有源码,点这里

现在来解释一下
我们在各个事件中的处理

  • MotionEvent.ACTION_DOWN:当用户按下时触发,此时初始化开始和结束时间
  • MotionEvent.ACTION_MOVE:这个在整个触摸事件中会不断回调,所有我们在这里记录结束时间,并判断用户按下时间是否超过2秒
  • MotionEvent.ACTION_UP:这个是当用户抬起手的时候回调,我们在这里判断所录制的时间是否大于2秒,如果大于则发送,否则不发送

可能你不知道为什么需要2秒后才录制,因为要有一个准备时间,不然用户如果只是单击一下,可能会出现异常(闪退),所有我就设置了一个准备时间,当然,你也可以设置更短(1秒)

好了,今天的内容就这么多,希望大家喜欢。

    原文作者:JYangkai
    原文地址: https://www.jianshu.com/p/7394c5566274
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞