正文
之前的文章我有写过如何录制音频,还没看过的朋友可以点这里,是关于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秒)
好了,今天的内容就这么多,希望大家喜欢。
网友评论