Android专题Android开发积累Android笔记本

Android 长按发送语音

2019-04-02  本文已影响44人  JYangkai

正文

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

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

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

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

上一篇下一篇

猜你喜欢

热点阅读