李长军android语音开发_Android模仿微信录音、发送语音效果实现

本文介绍了如何在Android中实现类似微信的录音和发送语音功能。通过自定义AudioRecorderButton控件,实现了长按录音、显示语音时长、上滑取消发送等功能。详细讲解了录音控件的内部逻辑,包括权限获取、录音状态管理、录音线程以及录音界面的显示与更新。
摘要由CSDN通过智能技术生成

在项目开发中,有个需求:实现模仿微信录音,发送语音的功能。长按按钮录音,弹框显示语音时间,以及上滑取消发送。我重写了一个发送语音的控件,以实现该功能。

首先添加权限:

AudioRecorderButton,自己实现的自定义录音控件

public class AudioRecorderButton extends Button {

private static final int STATE_NORMAL = 1;// 默认的状态

private static final int STATE_RECORDING = 2;// 正在录音

private static final int STATE_WANT_TO_CANCEL = 3;// 希望取消

private int mCurrentState = STATE_NORMAL; // 当前的状态

private boolean isRecording = false;// 已经开始录音

private static final int DISTANCE_Y_CANCEL = 50;

private DialogManager mDialogManager;

private AudioManager mAudioManager;

// 是否触发longClick

private boolean mReady;

android.media.AudioManager audioManager;

private static final int MSG_AUDIO_PREPARED = 0x110;

private static final int MSG_VOICE_CHANGED = 0x111;

private static final int MSG_DIALOG_DIMISS = 0x112;

private static final int MSG_TIME_OUT = 0x113;

private static final int UPDATE_TIME = 0x114;

private boolean mThreadFlag = false;

private int time = 0;

private float mTime;

/*

* 获取音量大小的线程

*/

private Runnable mGetVoiceLevelRunnable = new Runnable() {

public void run() {

while (isRecording) {

try {

Thread.sleep(100);

mTime += 0.1f;

time++;

if (isWantToCancel) {

} else {

if (time % 10 == 0) {

mHandler.sendEmptyMessage(UPDATE_TIME);

}

}

mHandler.sendEmptyMessage(MSG_VOICE_CHANGED);

if (mTime >= 10.0f) {//如果时间超过10秒,自动结束录音

while (!mThreadFlag) {//记录已经结束了录音,不需要再次结束,以免出现问题

mDialogManager.dimissDialog();

mAudioManager.release();

if (audioFinishRecorderListener != null) {

//发消息给主线程,告诉他reset();

mHandler.sendEmptyMessage(MSG_TIME_OUT);

audioFinishRecorderListener.onFinish(mTime, mAudioManager.getCurrentFilePath());

}

mThreadFlag = !mThreadFlag;

}

isRecording = false;

}

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

};

private Handler mHandler = new Handler() {

@Override

public void handleMessage(Message msg) {

switch (msg.what) {

case MSG_AUDIO_PREPARED:

// 显示對話框在开始录音以后

mDialogManager.showRecordingDialog();

isRecording = true;

// 开启一个线程

new Thread(mGetVoiceLevelRunnable).start();

break;

case MSG_VOICE_CHANGED:

mDialogManager.updateVoiceLevel(mAudioManager.getVoiceLevel(7));

break;

case MSG_DIALOG_DIMISS:

mDialogManager.dimissDialog();

break;

case MSG_TIME_OUT://录音超时

reset();

break;

case UPDATE_TIME://更新时间

if (time % 10 == 0) {

mDialogManager.updateTime(time / 10);

}

break;

}

}

};

/**

* 以下2个方法是构造方法

*/

public AudioRecorderButton(Context context, AttributeSet attrs) {

super(context, attrs);

mDialogManager = new DialogManager(context);

audioManager = (android.media.AudioManager) context.getSystemService(Context.AUDIO_SERVICE);

String dir = Environment.getExterna

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《射频通信电路设计第二版刘长军pdf》是一本关于射频通信电路设计的重要参考书籍。这本书由刘长军编写,是对射频通信电路设计领域的深入研究和总结。该书的PDF版本是电子书籍的一种形式,方便读者随时随地进行学习和阅读。 《射频通信电路设计第二版刘长军pdf》的内容涵盖了射频通信电路设计的基本理论知识、方法和技术,以及实际应用案例。该书主要分为几个部分,包括射频通信系统概述、射频信号传输与仿真、射频放大器设计与实现、射频滤波器设计与实现等。每一部分都有详细的介绍、公式推导和实例分析,能够让读者系统地掌握射频通信电路设计的知识和技能。 《射频通信电路设计第二版刘长军pdf》的优点在于它具有较高的实用性和适用性。作者刘长军在该领域有丰富的经验和研究成果,他将理论与实践相结合,使得本书既有理论基础,又有实际应用。读者可以通过学习该书,了解射频通信电路设计的最新发展和趋势,同时也能够具备一定的实际设计和调试能力。 总之,《射频通信电路设计第二版刘长军pdf》是一本权威且实用的射频通信电路设计参考书籍,适合从事射频通信电路设计和研究的工程师、学生和研究人员阅读学习。它可以帮助读者系统地掌握射频通信电路设计的理论知识和实际应用技巧,是该领域的重要参考资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值