【Android】如何封装一个Recorder类,然后在主Activity中调用该类的实例来进行录音操作?

雷进锋 发布于 2012/07/30 16:13
阅读 1K+
收藏 1
一下是我的代码,每次点击录音按钮就崩了,求大神指教~
///Recorder类
package com.com.testrecorder;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import android.content.Context;
import android.media.MediaRecorder;
import android.text.format.DateFormat;
public class Record {       
        //声明MediaRecorder
        public MediaRecorder mediarecorder;
        public Record()
        {
                //mediarecorder=new MediaRecorder();
        }
        /*
         * 检查SD卡状态,SD卡安装则返回true,卸载或作为USE接口则返回false
         */
        public boolean checkSDCard()
        {
                String state=android.os.Environment.getExternalStorageState();
                if(!state.equals(android.os.Environment.MEDIA_MOUNTED))
                        return false;
                else return true;
        }
        /*
         * 创建多重用户文件路径,创建成功则返回true,否则返回false
         */
        public boolean setPath()
        {
                String state=android.os.Environment.getExternalStorageState();
            if(!state.equals(android.os.Environment.MEDIA_MOUNTED))return false;
            File directory=new File(android.os.Environment.getExternalStorageDirectory()+"/HiChang");
                if(!directory.exists())
                {
                        if(!directory.mkdirs())return false;
                        else
                        {
                                directory=new File(android.os.Environment.getExternalStorageDirectory()+"/HiChang/record");
                                if(!directory.mkdirs())return false;
                                else return true;
                        }
                }
                else
                {
                        directory=new File(android.os.Environment.getExternalStorageDirectory()+"/HiChang/record");
                        if(directory.exists())return true;
                        if(!directory.mkdirs())return false;
                        else return true;
                }
        }
       
        //开始录音
        public void start()
        {
                if(setPath())
                {
                        Date now=new Date();
                        SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");
                        String recordname=sdf.format(now)+".amr";               
                        String path=android.os.Environment.getExternalStorageDirectory()+"/HiChang/record/"+recordname;
                        File file = new File(path);
                        try
                        {
                                mediarecorder = new MediaRecorder();
                                mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                                mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
                                mediarecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                                mediarecorder.setOutputFile(file.getAbsolutePath());
//                                //创建文件
                                file.createNewFile();
//                                //准备录制
//                                mediarecorder.prepare();
                        }
                        catch (IllegalStateException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                        //开始录制
                        //mediarecorder.start();
                }
        }
        //停止录音
        public void stop()
        {
                //停止录音
                mediarecorder.stop();
                //释放资源
                mediarecorder.release();
                mediarecorder=null;
        }
}

///主Activity
package com.testrecorder;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class myRecorder extends Activity implements OnClickListener{
        Record record;
       
        Button play;
        Button stop;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        play=(Button)findViewById(R.id.play);
            stop=(Button)findViewById(R.id.stop);
            stop.setEnabled(false);
            play.setOnClickListener(this);
            stop.setOnClickListener(this);
            record=new Record();
   
    @Override
    public void onClick(View v)
    {
            switch(v.getId())
            {
                    case R.id.play:
                    {
                            record.start(MediaRecorder.OutputFormat.DEFAULT, ".amr", this);
                                play.setEnabled(false);
                                stop.setEnabled(true);
                    }
                    break;
                    case R.id.stop:
                    {
                            record.stop();
                                play.setEnabled(true);
                                stop.setEnabled(false);
                    }
                    break;
            }
    }
}

加载中
返回顶部
顶部