说明
最近参考别人代码自己模仿着写了一个微信长按录音的功能
效果图
本来录完的时候那个“我是时间”应该会变为具体的时间的,但是不知道我的360奇酷手机出了什么毛病,一直不会改变,以及那个试听的语音框其实可以根据时间长短改变长度的,但是这些在我手机上都不会发生。在别的测试机上都OK。
对360奇酷手机真是醉了,不知道他们把底层给改了多少东西,前一段时间我试验5.0的新特性,它居然够本能展现那些新特性。红衣教主一直想把自己的手机往“安全”这方面发展,修改底层这么多东西,是不是给开发者也带来了很多困扰呢。
代码分析
我将代码重新整理改写成了一个小Demo
这里一共需要5个类
- Dialog管理类
这个类主要是用来创建一个Dialog,也就是录音开始的时候显示的那个Dialog,以及在不同的状态时Dialog展现不同的内容。 - Audio管理类
这个类主要是开启MediaRecorder以及管理MediaRecorder的。 - AudioRecordButton类
这个是自定义实现的Button类,继承复写了Button。 - Activity类
这个主要就是用来放内容的Activity了 - Media管理类
主要用来播放试听已录好的录音
主要代码实现
- AudioRecordButton类
public AudioRecordButton(Context context) {
this(context, null);
}
public AudioRecordButton(final Context context, AttributeSet attrs) {
super(context, attrs);
mDialogManager = new DialogManager(context);
String dir = Environment.getExternalStorageDirectory() + "/recorder_audios";
mAudioManager = AudioManager.getInstance(dir);
mAudioManager.setOnAudioStageListener(new AudioManager.AudioStageListener() {
@Override
public void wellPrepared() {
//准备好了,发送一个handler消息
mHandler.sendEmptyMessage(MSG_AUDIO_PREPARED);
}
});
setOnLongClickListener(new OnLongClickListener() {