package com.pro.play_record.test;
import java.io.File;
import java.io.IOException;
import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.pro.play_record.R;
public class RecorderSolution1 extends Activity {
private Button record_btn;
private Button playback_btn;
private TextView tip;
public Activity activity = this;
private String audioFileHolder = "/mnt/sdcard/tmp/juice.3gp";
ImageView iv_vu;
private void initViews() {
iv_vu = (ImageView) findViewById(R.id.iv_vu);
record_btn = (Button) this.findViewById(R.id.record);
playback_btn = (Button) this.findViewById(R.id.play);
tip = (TextView) this.findViewById(R.id.tip);
record_btn.setOnTouchListener(new ButtonTouch());
playback_btn.setOnTouchListener(new ButtonTouch());
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
}
final StringBuffer sb = new StringBuffer("");
MediaRecorder recorder;
MediaPlayer mp = new MediaPlayer();
// 录音代码,省略30 line
// public static MediaRecorder mRecorder;
// 启动一线程,来更新ui状态
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 65535) {
int vuSize = msg.arg1;
tip.setText("输入音量 " + vuSize);
if (vuSize == 0) {
iv_vu.setImageResource(R.drawable.amp_land_1);
} else if (vuSize == 1) {
iv_vu.setImageResource(R.drawable.amp_land_2);
} else if (vuSize == 2) {
iv_vu.setImageResource(R.drawable.amp_land_3);
} else if (vuSize == 3) {
iv_vu.setImageResource(R.drawable.amp_land_4);
} else if (vuSize == 4) {
iv_vu.setImageResource(R.drawable.amp_land_5);
} else if (vuSize == 5) {
iv_vu.setImageResource(R.drawable.amp_land_6);
} else if (vuSize == 6) {
iv_vu.setImageResource(R.drawable.amp_land_7);
} else if (vuSize == 7) {
iv_vu.setImageResource(R.drawable.amp_land_8);
} else if (vuSize == 8) {
iv_vu.setImageResource(R.drawable.amp_land_9);
} else if (vuSize == 9) {
iv_vu.setImageResource(R.drawable.amp_land_10);
} else if (vuSize == 10) {
iv_vu.setImageResource(R.drawable.amp_land_11);
}
}
}
};
private Runnable mUpdateMicStatusTimer = new Runnable() {
public void run() {
updateMicStatus();
}
};
/**
* 更新话筒状态
*/
private void updateMicStatus() {
if (recorder != null) {
int vuSize = 10 * recorder.getMaxAmplitude() / 32768;
mHandler.postDelayed(mUpdateMicStatusTimer, 100);
Message msg = mHandler.obtainMessage();
msg.what = 65535;
msg.arg1 = vuSize;
mHandler.sendMessage(msg);
}
}
class ButtonTouch implements View.OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() == R.id.record) {
File file = new File("/mnt/sdcard/tmp/");
if (!file.exists()) {
file.mkdirs();
}
if (MotionEvent.ACTION_DOWN == event.getAction()) {
sb.append("开始录制……\n");
tip.setText(sb);
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(audioFileHolder);
try {
recorder.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
new Thread(mUpdateMicStatusTimer).start();
recorder.start();
} else if (MotionEvent.ACTION_UP == event.getAction()) {
recorder.stop();
recorder.release();
recorder = null;
sb.append("停止录制!\n");
tip.setText(sb);
/**
* 开始播放
*/
// try {
// mp.setDataSource(audioFileHolder);
// mp.prepare();
// mp.start();
// } catch (IllegalArgumentException e) {
// e.printStackTrace();
// } catch (IllegalStateException e) {
// e.printStackTrace();
// } catch (IOException e) {
// e.printStackTrace();
// }
}
} else if (v.getId() == R.id.play) {
if (MotionEvent.ACTION_DOWN == event.getAction()) {
} else if (MotionEvent.ACTION_UP == event.getAction()) {
}
}
return false;
}
}
@Override
protected void onStop() {
super.onStop();
if (mp.isPlaying()) {
mp.stop();
}
recorder.stop();
recorder.release();
recorder = null;
}
}