弹窗录音精简版

直接贴代码了,不解释了,这是精简版的,生成文件时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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值