直接贴代码了,不解释了,这是精简版的,生成文件时amr的音频格式,当然也有完成版,生成的是wav格式的文件。
录音播放:
public class MyVoiceUtil {
private Context context;
private MediaRecorder mediaRecorder;
private File audioFile;
private MediaPlayer player;
public MyVoiceUtil(Context context){
this.context=context;
}
public void makeTape(){
try {
mediaRecorder=new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
audioFile=File.createTempFile("tape_temp", "amr");
mediaRecorder.setOutputFile(audioFile.getAbsolutePath());
mediaRecorder.prepare();
mediaRecorder.start();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void stopTape(){
if(mediaRecorder!=null){
mediaRecorder.stop();
mediaRecorder.reset();
mediaRecorder.release();
mediaRecorder=null;
}
}
public void play() {
if(audioFile!=null){
if(player!=null){
player.stop();
Toast.makeText(context, "停止试听过程", 0).show();
player=null;
}else{
try {
player = new MediaPlayer();
player.setDataSource(audioFile.getAbsolutePath());
player.prepare();
player.start();
} catch (IOException e) {
}
}
}else{
Toast.makeText(context, "未找到试听文件", 0).show();
}
}
}
弹窗:
public class SelectPicPopupWindow extends PopupWindow{
private Button makeTape , playTape , pauseTape , cancel;
private View mMenuView;
private MyVoiceUtil voice;
public static long begin=0;
public static long end=0;
public SelectPicPopupWindow(final Activity context) {
super(context);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mMenuView = inflater.inflate(R.layout.tape_window, null);
makeTape = (Button) mMenuView.findViewById(R.id.bt_tape);
playTape = (Button) mMenuView.findViewById(R.id.bt_play);
pauseTape = (Button) mMenuView.findViewById(R.id.bt_confirm);
cancel = (Button)mMenuView.findViewById(R.id.bt_cancel);
final MyVoiceUtil voice=new MyVoiceUtil(context);
//取消按钮
cancel.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//�?毁弹出框
dismiss();
}
});
//点击录音 模式的
makeTape.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
begin=System.currentTimeMillis();
if(begin-end>1000){
voice.makeTape();
pauseTape.setVisibility(View.VISIBLE);
makeTape.setVisibility(View.GONE);
Toast.makeText(context, "开始录音", 0).show();
}else{
Toast.makeText(context, "请不要连点", 0).show();
}
}
});
pauseTape.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
end=System.currentTimeMillis();
if(end-begin<1000){
SystemClock.sleep(300);
voice.stopTape();
pauseTape.setVisibility(View.GONE);
makeTape.setVisibility(View.VISIBLE);
Toast.makeText(context, "时间太短,无法正常录音", 0).show();
}else{
voice.stopTape();
pauseTape.setVisibility(View.GONE);
makeTape.setVisibility(View.VISIBLE);
Toast.makeText(context, "停止录音", 0).show();
}
}
});
//按住录音类型的
cancel.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN){
begin=System.currentTimeMillis();
if(begin-end>1000){
voice.makeTape();
Toast.makeText(context, "开始录音", 0).show();
}else{
Toast.makeText(context, "请不要连点", 0).show();
}
}else if(event.getAction()==MotionEvent.ACTION_UP){
end=System.currentTimeMillis();
if(end-begin<1000){
SystemClock.sleep(300);
voice.stopTape();
Toast.makeText(context, "时间太短,无法正常录音", 0).show();
}else{
voice.stopTape();
Toast.makeText(context, "停止录音", 0).show();
}
}
return true;
}
});
playTape.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
voice.play();
}
});
//设置按钮监听
//makeTape.setOnClickListener(itemsOnClick);
//playTape.setOnClickListener(itemsOnClick);
//设置SelectPicPopupWindow的View
this.setContentView(mMenuView);
//设置SelectPicPopupWindow弹出窗体的宽
this.setWidth(LayoutParams.MATCH_PARENT);
//设置SelectPicPopupWindow弹出窗体的高
this.setHeight(LayoutParams.WRAP_CONTENT);
//设置SelectPicPopupWindow弹出窗体可点�?
this.setFocusable(true);
//设置SelectPicPopupWindow弹出窗体动画效果
this.setAnimationStyle(R.style.mypopwindow_anim_style);
//添加弹出和回弹动画在style中设�?
//实例化一个ColorDrawable颜色为半透明
ColorDrawable dw = new ColorDrawable(0xa0000000);
//设置SelectPicPopupWindow弹出窗体的背�?
this.setBackgroundDrawable(dw);
//mMenuView添加OnTouchListener监听判断获取触屏位置如果在�?�择框外面则�?毁弹出框
mMenuView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
int height = mMenuView.findViewById(R.id.tape_window).getTop();
int y=(int) event.getY();
if(event.getAction()==MotionEvent.ACTION_UP){
if(y<height){
dismiss();
}
}
return true;
}
});
}
}
最后上一张完成版的效果图,精简版的图太low,主要是给大家看看,打开个思路,截取部分代码用而已。
完整版的下载地址:http://download.csdn.net/download/kangkang_style/9619666