android中的录音问题

时间:2011-05-12 10:38:40

标签: android voice-recording

我正在为平板电脑创建一个录音笔应用程序。我尝试使用以下代码录制声音。但是当我点击停止按钮时它会崩溃帮助我......

public class soundrecord extends Activity {
    private Button start;
    private Button stop;
    private TextView txt;
     MediaRecorder recorder;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        start=(Button)findViewById(R.id.start);
        stop=(Button)findViewById(R.id.stop);
        txt=(TextView)findViewById(R.id.txtstatus);
        recorder = new MediaRecorder();  
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);  
        recorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);  
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);  
        recorder.setOutputFile("/myfile/temp");  



        start.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                 try {
                     txt.setText("recording");
                     recorder.prepare();
                     recorder.start(); 
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }


            }
        })  ;       


        stop.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                txt.setText("stop recording");
                recorder.stop();
                /*recorder.reset();    
                recorder.release();*/

            }
        })  ;


    }
}

这是logcat

中显示的异常

05-12 15:49:01.013:ERROR / AndroidRuntime(677):java.lang.IllegalStateException

2 个答案:

答案 0 :(得分:1)

documentation for stop说:

  

如果在start()

之前调用它,则为IllegalStateException

现在我假设你在开始之前没有打电话给它。我想知道你的onCreate()是否正常发生。如果出于某种原因第二次调用onCreate()(例如屏幕旋转),则会创建一个新的MediaRecorder,并且您将在没有调用start的记录器上调用stop()。

另外,你确定start()工作正常吗? IllegalStateException可能来自start()。你能给我们一个完整的堆栈跟踪来说明IllegalStateException的来源吗?


继续你所给予的例外。这可能是因为听力计目录不存在。如果你用File.mkdir()创建它,它应该工作。或者,尝试使用顶级文件名运行,如以下示例中所示: http://developer.android.com/guide/topics/media/index.html

recorder.setOutputFile("/audiorecordtest.3gp");

答案 1 :(得分:0)

请通过以下链接。这是我在developer.android.com中找到的示例代码,可能会对您有所帮助http://developer.android.com/guide/topics/media/index.html