Android 长按发送语音

作者: JYangkai | 来源:发表于2019-04-02 21:48 被阅读44次

    正文

    之前的文章我有写过如何录制音频,还没看过的朋友可以点这里,是关于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秒)

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

    相关文章

      网友评论

        本文标题:Android 长按发送语音

        本文链接:https://www.haomeiwen.com/subject/lcgnbqtx.html