audiomanager.java,Audio整合后测试出错,希望hyman老师和同学们看下

mport com.example.imoc_recorder.R;

import com.imoc_recorder.view.AudioManager.AudioStateListener;

import android.R.integer;

import android.content.Context;

import android.os.Environment;

import android.os.Handler;

import android.util.AttributeSet;

import android.util.Log;

import android.view.MotionEvent;

import android.view.View;

import android.widget.Button;

public class AudioRecorderButton extends Button implements AudioStateListener {

private final int DISTANCE_Y_CANCEL = 50; //y方向的移动距离

private static final int STATE_NORNMAL =1;

private static final int STATE_RECORDING =2;

private static final int STATE_WANT_TO_CANCEL =3;

private int mCurState = STATE_NORNMAL;

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

private DailogManager mDailogManager;

private AudioManager mAudioManager;

private float mTime=0;

//是否触发longclick

private boolean mReady;

public AudioRecorderButton(Context context) {

this(context,null);

}

public AudioRecorderButton(Context context, AttributeSet attrs) {

super(context, attrs);

mDailogManager = new DailogManager(getContext());

setOnLongClickListener(new OnLongClickListener() {

@Override

public boolean onLongClick(View v) {

mReady = true;

mAudioManager.prepareAudio();

return false;

}

});

String dir = Environment.getExternalStorageDirectory()+"/imooc_recorder_audios";

mAudioManager = AudioManager.getInstance(dir);

mAudioManager.setOnAudioStateListener(this); //注册回调

}

//录音完成后的回调

public interface AudioFinishRecorderListener {

void onFinished(float seconds,String filePath);

}

private AudioFinishRecorderListener mListener;

public void setAudioFinishRecorderListener(AudioFinishRecorderListener listener) {

mListener = listener;

}

@Override

public void wellPrepared() {

mHandler.sendEmptyMessage(MSG_AUDIO_PREPARED);

}

/*

* 获取音量大小

*/

private Runnable mGetVoiceLevelRunnable=new Runnable() {

@Override

public void run() {

while (isRecording) {

try {

Thread.sleep(100);

mTime+=0.1f;

mHandler.sendEmptyMessage(MSG_VOICE_CHANGE);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

};

private static final int MSG_AUDIO_PREPARED = 0X110;

private static final int MSG_VOICE_CHANGE = 0X111;

private static final int MSG_DIALOG_DIMISS = 0X112;

private  Handler mHandler = new Handler()

{

public void handleMessage(android.os.Message msg) {

switch (msg.what) {

case MSG_AUDIO_PREPARED:

// 正真显示dialog在audio end prepared以后

mDailogManager.showRecordingDialog();

isRecording = true;

//开启线程获取音量

new Thread(mGetVoiceLevelRunnable).start();

break;

case MSG_VOICE_CHANGE:

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

break;

case MSG_DIALOG_DIMISS:

mDailogManager.dimissDialog();

break;

}

};

};

@Override

public boolean onTouchEvent(MotionEvent event) {

int action = event.getAction();

int x = (int) event.getX();

int y = (int) event.getY();

//        try {

switch (action) {

case MotionEvent.ACTION_DOWN:

changeState(STATE_RECORDING);

break;

case MotionEvent.ACTION_MOVE:

if (isRecording) {

if (wantToCancel(x,y)) {

changeState(STATE_WANT_TO_CANCEL);

}else {

changeState(STATE_RECORDING);

}

}

break;

case MotionEvent.ACTION_UP:

if (!mReady) {

reset();

return super.onTouchEvent(event);

}

if (!isRecording||mTime<0.6f) {//时间短,还没有来得及repared

mDailogManager.tooShort();

mAudioManager.cancel();

mHandler.sendEmptyMessageDelayed(MSG_DIALOG_DIMISS, 1300);//1.3秒后关闭tooshort

}else    if (mCurState==STATE_RECORDING) {//正常录制结束

//release

mDailogManager.dimissDialog();

mAudioManager.release();

//callbackToAct

if (mListener != null) {

mListener.onFinished(mTime, mAudioManager.getCurrentFilePath());

}

}else if (mCurState==STATE_WANT_TO_CANCEL) {

//cancel

mDailogManager.dimissDialog();

mAudioManager.cancel();

}

reset();

break;

}

//        } catch (Exception e) {

//            System.out.println("1111111111111111111111111111");

//            e.printStackTrace();

//        }

return super.onTouchEvent(event);

}

//恢复标志位

private void reset() {

isRecording = false;

changeState(STATE_NORNMAL);

mTime = 0;

mReady = false;

}

private boolean wantToCancel(int x, int y) {

if (x<0 || x>getWidth()) {

return true ;

}

if(ygetHeight()+DISTANCE_Y_CANCEL)

{

return true;

}

return false;

}

private void changeState(int state) {//state是将要边车的状态

if (mCurState!=state) {

mCurState = state;

switch (state) {

case STATE_NORNMAL:

setBackgroundResource(R.drawable.btn_recorder_normal);

setText(R.string.str_recorder_normal);

break;

case STATE_RECORDING:

setBackgroundResource(R.drawable. btn_recording);

setText(R.string.str_recorder_recording);

if (isRecording) {

mDailogManager.recording();

}

break;

case STATE_WANT_TO_CANCEL:

setBackgroundResource(R.drawable.btn_recording);

setText(R.string.str_recorder_cancel);

mDailogManager.wantToCancel();

break;

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值